我使用多个数据库来存储不同的实体。我的实体和存储库分为不同的包。对于每个数据库,我需要创建@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);
}
}
效果很好!但是我需要为每个数据库创建单独的类 我想在应用程序开始读取属性.yml文件时创建此类bean。 并查看顶部的注释-如何将一些参数传递给注释?
换句话说,我有带有数据库连接属性的.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");
}
答案 0 :(得分:0)
您可以使用@Profile
批注。然后为每个配置文件创建属性文件。例如
@Profile("test")
@Profile("dev")
application-test.yml
application-dev.yml
答案 1 :(得分:0)
如果表达式验证为true,则使用@ConditionalOnExpression
将加载`@Configuration类
@ConditionalExpression("${my.rest.controller.enabled}")
{{3}}
@ConditionalOnProperty(prefix = "spring", name = "example.values")