6

いくつかのプロパティ ファイルで Spring JavaConfig を使用しようとしていますが、Bean のプロパティが設定されていませんか?Bean が設定されていませんか?

これが私のWebConfigです:

@Configuration
@EnableWebMvc
@PropertySource(value = "classpath:application.properties")
@Import(DatabaseConfig.class)
@ImportResource("/WEB-INF/applicationContext.xml")
public class WebMVCConfig extends WebMvcConfigurerAdapter {

    private static final String MESSAGE_SOURCE = "/WEB-INF/classes/messages";

    private static final Logger logger = LoggerFactory.getLogger(WebMVCConfig.class);

    @Value("${rt.setPassword}")
    private String RTPassword;

    @Value("${rt.setUrl}")
    private String RTURL;

    @Value("${rt.setUser}")
    private String RTUser;


    @Bean
    public  ViewResolver resolver() {
        UrlBasedViewResolver url = new UrlBasedViewResolver();
        url.setPrefix("/WEB-INF/view/");
        url.setViewClass(JstlView.class);
        url.setSuffix(".jsp");
        return url;
    }


    @Bean(name = "messageSource")
    public MessageSource configureMessageSource() {
        logger.debug("setting up message source");
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename(MESSAGE_SOURCE);
        messageSource.setCacheSeconds(5);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver lr = new SessionLocaleResolver();
        lr.setDefaultLocale(Locale.ENGLISH);
        return lr;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        logger.debug("setting up resource handlers");
        registry.addResourceHandler("/resources/").addResourceLocations("/resources/**");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        logger.debug("configureDefaultServletHandling");
        configurer.enable();
    }

    @Override
    public void addInterceptors(final InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor());
    }

    @Bean
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver b = new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        mappings.put("org.springframework.web.servlet.PageNotFound", "p404");
        mappings.put("org.springframework.dao.DataAccessException", "dataAccessFailure");
        mappings.put("org.springframework.transaction.TransactionException", "dataAccessFailure");
        b.setExceptionMappings(mappings);
        return b;
    }

    @Bean
    public RequestTrackerConfig requestTrackerConfig()
    {
        RequestTrackerConfig tr = new RequestTrackerConfig();
        tr.setPassword(RTPassword);
        tr.setUrl(RTURL);
        tr.setUser(RTUser);

        return tr;
    }


}

tr.url の値は「rt.setUrl」であり、application.properties の値ではありませんか?

4

3 に答える 3

5

私は 100% で@PropertySourceはありませんが、あなたの意見は正しくないと思います。それ以外の

@PropertySource(value = "classpath:application.properties")

次のようにする必要があります。

@PropertySource("classpath:application.properties")

これに基づいて:

Spring PropertySource ドキュメント

また、上記のリンクに基づいて、xml ではなく Java 構成アプローチに変換していると述べたので、以下が問題の解決策になると思います。

および @Value アノテーションでの ${...} プレースホルダーの解決 PropertySource のプロパティを使用して、定義または @Value アノテーションで ${...} プレースホルダーを解決するには、PropertySourcesPlaceholderConfigurer を登録する必要があります。これは、XML で使用する場合は自動的に行われますが、@Configuration クラスを使用する場合は静的 @Bean メソッドを使用して明示的に登録する必要があります。詳細と例については、@Configuration Javadoc の「外部化された値の操作」セクションと、@Bean Javadoc の「BeanFactoryPostProcessor を返す @Bean メソッドに関する注意事項」を参照してください。

上記のリンクの例は、私が通常行う方法です。

 @Configuration
 @PropertySource("classpath:/com/myco/app.properties")
 public class AppConfig {
     @Autowired
     Environment env;

     @Bean
     public TestBean testBean() {
         TestBean testBean = new TestBean();
         testBean.setName(env.getProperty("testbean.name"));
         return testBean;
    }
 }

したがって、上部に追加します:

@Autowired
Environment env;

次に、メソッドで次を使用します。

tr.setPassword(env.getProperty("rt.setPassword"));

残りのプロパティ値についても同様です。私はあなたがやっている方法に精通していません。ただし、上記のアプローチが機能することはわかっています。

于 2013-03-18T14:15:50.403 に答える