我有5个不同数据库名称的微服务,所以除了每个属性都很常见,因此包含在application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=${local.db.username:}
spring.datasource.password=${local.db.password:}
我有类commondatasource.java,其中包含属性
@PropertySource({ "classpath:application-test.properties" })
@Component
public class CommonDataSourceConfig {
@Autowired
private Environment env;
@Primary
@Bean
public DataSource dataadmindataSource()
{
final DataSource dataSource = new DataSource();
dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("spring.datasource.driverClassName")));
dataSource.setUrl(Preconditions.checkNotNull("spring.datasource.url"));
dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("spring.datasource.username")));
dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("spring.datasource.password")));
}
}
现在我想在每个微服务datasourceconfig.java中调用 commondatasource
@Configuration
@EnableJpaRepositories(basePackages = {
"xxx.repositories" }, entityManagerFactoryRef = "xxEntityManager",
transactionManagerRef = "xxTransactionManager")
public class xxSourceConfig
{
@Autowired
private Environment env;
@Autowired
private CommonDataSourceConfig common;
@Value("${xx.datasource.url}")
private String url;
/**
* Configures the entity manager
*
* @return
*/
@Primary
@Bean
public LocalContainerEntityManagerFactoryBean dataAdminEntityManager()
{
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource(common.dataadmindataSource());
entityManager.setPackagesToScan(new String[] { "com.boeing.toolbox.dataadmin.domain" });
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
entityManager.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<String, Object>();
properties.put("hibernate.hbm2ddl.auto", env.getProperty("spring.jpa.hibernate.ddl-auto"));
properties.put("hibernate.dialect", env.getProperty("spring.jpa.database-platform"));
entityManager.setJpaPropertyMap(properties);
return entityManager;
}
}
来实现
我是这个概念的新手,对我如何在我的项目中实现上面的课程提供帮助
答案 0 :(得分:0)
我遇到了这个问题,因为我想删除现有的自定义DataSource
配置,而仅依靠DataSourceAutoConfiguration
。
关键是,如果使用自动配置,
DataSource
(或EmbeddedDatabaseType
)在类路径上;和DataSource
bean;和spring.datasource.type
属性(对于Spring Boot 1.3+),或者在您的情况下,第二个条件失败,因为CommonDataSourceConfig
声明了一个DataSource
bean。自动配置因此退出。
因此,您应该删除该bean,并通过设置spring.datasource.type
或最好在类路径中放置兼容的连接池来确保满足第3个条件。
然后DataSourceAutoConfiguration
(根据您的属性)就可以完成工作,并且您应该能够直接使用DataSource
注入@Autowired
。