如何在应用程序启动中的属性开始时,如何在应用程序上创建bean



i使用多个数据库存储不同的实体。我的实体和存储库被拆分为不同的packges。对于每个数据库,我需要创建@configuration以正确持久数据并正确创建表。

这是我一个数据库的@configuration文件

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "entityManagerFactory",
    basePackages = { "com.domain.shop.users.repositories" },
    transactionManagerRef = "transactionManager"
)
public class UsersDatabaseConfig {
@Autowired
private DatasourceConnectionManager dscm;
@Primary
@Bean(name = "dataSource1")
public DataSource dataSource() {
    return dscm.getDataSource("users");
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean 
entityManagerFactory(EntityManagerFactoryBuilder builder, 
@Qualifier("dataSource1") DataSource dataSource1) {
    HashMap<String, Object> properties = new HashMap<>();
    properties.put("hibernate.hbm2ddl.auto", "update");
    return builder
            .dataSource(dataSource1)
            .packages("com.domain.shop.users.models")
            .properties(properties)
            .build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager 
transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory 
entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
 }
}

它可以很好地工作!但是我需要为每个数据库创建单独的类我想在应用程序开始读取属性时创建这样的bean .yml文件。并查看顶部的注释 - 如何将某些参数传递给注释?

其他单词,我有带有数据库连接属性的.yml文件。我想在每个数据库中添加一些属性(例如,rootdirectory = com.domain.shop.products(。之后,我想用以下代码创建动态bean:

 @Configuration
 @EnableTransactionManagement
 @EnableJpaRepositories(
    entityManagerFactoryRef = "productsEntityManagerFactory",
    basePackages = { "com.domain.shop.products.repositories" },
    transactionManagerRef = "productsTransactionManager"
)

和下一个

@Bean(name = "productsDataSource")
public DataSource dataSource() {
    return dscm.getDataSource("products");
}

您可以使用@Profile注释。然后为每个配置文件创建属性文件。例如

@Profile("test") @Profile("dev") application-test.yml application-dev.yml

使用 @ConditionalOnExpression将加载'@configuration类,如果表达式验证为true

@ConditionalExpression("${my.rest.controller.enabled}")

或使用@ConditionalOnProperty

@ConditionalOnProperty(prefix = "spring", name = "example.values")

最新更新