source

application.properties를 사용하여 맵을 전달하는 방법

manycodes 2023. 3. 7. 21:37
반응형

application.properties를 사용하여 맵을 전달하는 방법

설정할 필요가 있는 Web 서비스에 몇 가지 인가를 실장하고 있습니다.

현재 사용자/비밀번호 콤보는 bean 구성에 하드코드되어 있습니다.application.properties에 사용자 및 패스워드를 사용하여 맵을 설정하여 외부 설정을 할 수 있도록 합니다.

어떻게 할 수 있는지 단서가 있나요?

<bean id="BasicAuthorizationInterceptor" class="com.test.BasicAuthAuthorizationInterceptor">
    <property name="users">
        <map>
            <entry key="test1" value="test1"/>
            <entry key="test2" value="test2"/>
        </map>
    </property>
</bean>

사용할 수 있습니다.@Value.

속성 파일:

users={test1:'test1',test2:'test2'}

자바 코드:

@Value("#{${users}}")
private Map<String,String> users;

사용할 수 있습니다.@ConfigurationProperties가치관이 있다application.properties콩에 묶여서이렇게 하려면 다음 항목에 주석을 달아야 합니다.@Beanbean 작성 방법:

@Bean
@ConfigurationProperties
public BasicAuthAuthorizationInterceptor interceptor() {
    return new BasicAuthAuthorizationInterceptor();
}

콩의 초기화의 일부로서, 모든 속성은BasicAuthAuthorizationInterceptor는, 애플리케이션의 환경에 근거해 설정됩니다.예를 들어, 이것이 bean의 클래스인 경우:

public class BasicAuthAuthorizationInterceptor {

    private Map<String, String> users = new HashMap<String, String>();

    public Map<String, String> getUsers() {
        return this.users;
    }
}

다음으로 application.properties를 나타냅니다.

users.alice=alpha
users.bob=bravo

그 다음에users맵에는 다음 2개의 엔트리가 입력됩니다.alice:alpha그리고.bob:bravo.

이 모든 것을 정리한 샘플 앱은 다음과 같습니다.

import java.util.HashMap;
import java.util.Map;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
public class Application {

    public static void main(String[] args) throws Exception {
        System.out.println(SpringApplication.run(Application.class, args)
                .getBean(BasicAuthAuthorizationInterceptor.class).getUsers());
    }

    @Bean
    @ConfigurationProperties
    public BasicAuthAuthorizationInterceptor interceptor() {
        return new BasicAuthAuthorizationInterceptor();
    }

    public static class BasicAuthAuthorizationInterceptor {

        private Map<String, String> users = new HashMap<String, String>();

        public Map<String, String> getUsers() {
            return this.users;
        }
    }
}

다양한 구성 옵션에 대한 자세한 내용은 javadoc for를 참조하십시오.예를 들어 프리픽스를 설정하여 설정을 여러 네임스페이스로 분할할 수 있습니다.

@ConfigurationProperties(prefix="foo")

바인딩이 작동하려면 application.properties에서 선언된 속성에 동일한 접두사를 사용해야 합니다.

foo.users.alice=alpha
foo.users.bob=bravo

오브젝트는 이미Map, 실제로HashTable다시 구현되는 것은Map.

따라서 속성 파일을 생성할 때(이름 지정 가능)users.properties)를 사용하여 로드할 수 있습니다.PropertiesFactoryBean또는<util:properties />그리고 그걸 네 반에 주입해.

test1=test1
test2=test2

그럼 이렇게 해.

<util:properties location="classpath:users.properties" id="users" />

<bean id="BasicAuthorizationInterceptor" class="com.test.BasicAuthAuthorizationInterceptor">
    <property name="users" ref="users" />
</bean>

하지만 만약 당신이Map<String, String>사용자 속성 유형으로 실패할 수 있습니다.저라면 안 넣어요application.properties파일이에요. 하지만 그건 저일 수도 있어요

비슷한 걸 찾는 것 같은데

http://www.codejava.net/frameworks/spring/reading-properties-files-in-spring-with-propertyplaceholderconfigurer-bean

마찬가지로 .properties에서 값을 선택하여 맵에 할당할 수 있습니다.

언급URL : https://stackoverflow.com/questions/26275736/how-to-pass-a-mapstring-string-with-application-properties

반응형