【问题标题】:Spring java config bean definition overridingSpring java config bean定义覆盖
【发布时间】:2016-07-25 10:37:40
【问题描述】:

在我的 Spring 应用程序中,我有一个名为 @Configuration 的主类,比如说,ConfigApplication。我还有一些基于配置文件的配置类,ConfigDevConfigProd。情况恢复如下:

@Configuration
@ComponentScan("fr.gf.predication.*")
@Import(value = ConfigSecurity.class)
@PropertySource("classpath:configuration/default.properties")
public class ConfigApplication {

    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
        return transactionManager;
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
        entityManagerFactoryBean.setPackagesToScan(MODEL_PACKAGE);
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setJpaProperties(loadHibernateConfiguration());

        return entityManagerFactoryBean;
    }
}

如果我选择移动 dataSource bean 定义以在我的环境之间进行特定配置(例如有和没有连接池),我将不得不复制所有其他 bean 定义(entityManagerFactorytransactionManager)因为他们需要 dataSource bean。

我试图在我的ConfigProd 类中覆盖这个 bean 定义,但它似乎被 Spring 忽略了,直到它已经在主配置类中加载了 bean...
有没有办法实现这种特定于环境的配置?还是我应该重新考虑这些类的设计?

【问题讨论】:

    标签: spring-java-config


    【解决方案1】:

    最后,我找到了解决方案。我刚刚在ConfigProd 类中添加了注释@Import(ConfigApplication.class)。这样,dataSource bean 定义就会按预期被覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多