Java 希望在spring boot应用程序中使用两个数据源(mysql、h2数据库)

Java 希望在spring boot应用程序中使用两个数据源(mysql、h2数据库),java,spring,spring-boot,Java,Spring,Spring Boot,我想在SpringBoot应用程序中使用两个数据源,比如我想使用h2的一些表,以及使用jpa hibernate的mysql。 在我的application.java中,我正在做的是 @Bean @Primary @ConfigurationProperties(prefix="datasource.primary") public DataSource primaryDataSource() { System.out.println(list+"===

我想在SpringBoot应用程序中使用两个数据源,比如我想使用h2的一些表,以及使用jpa hibernate的mysql。 在我的application.java中,我正在做的是

 @Bean
    @Primary
    @ConfigurationProperties(prefix="datasource.primary")
    public DataSource primaryDataSource() {
        System.out.println(list+"============");
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }


     @Bean(name = "entityManagerFactory")
        @Primary
        public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
                EntityManagerFactoryBuilder builder) {
            return builder
                    .dataSource(primaryDataSource())
                    .packages("com.opallios.ode.model")
                    .persistenceUnit("primary")
                    .properties(buildProperties())
                    .build();
        }


     @Bean(name = "secondaryEntityManagerFactory")
        public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
                EntityManagerFactoryBuilder builder) {
            return builder
                    .dataSource(secondaryDataSource())
                    .packages("com.opallios.ode.model")
                    .persistenceUnit("secondary")
                    .properties(buildProperties())
                    .build();
        }

        private Map<String, Object> buildProperties() {
            // This is usually set by HibernateJpaAutoConfiguration
            Map<String, Object> properties = new HashMap<String, Object>();
            properties.put("hibernate.ejb.naming_strategy",
                    ImprovedNamingStrategy.class.getName());
            return properties;
        }

        @Bean
        @Autowired
        @Qualifier("secondaryEntityManagerFactory")
        public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
            JpaTransactionManager txManager = new JpaTransactionManager();
            txManager.setEntityManagerFactory(emf);
            return txManager;
        }

        @Bean
        @Autowired
        @Qualifier("entityManagerFactory")
        public PlatformTransactionManager transactionManagerr(EntityManagerFactory emf) {
            JpaTransactionManager txManager = new JpaTransactionManager();
            txManager.setEntityManagerFactory(emf);
            return txManager;
        } 


    @Bean   
    public ServletRegistrationBean h2servletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
        Map<String,String> params = new HashMap<String,String>();
        params.put("webAllowOthers", h2WebAllow);
        registration.setInitParameters(params);
        registration.addUrlMappings("/console/*");
        return registration;
    }enter code here
@Bean
@初级的
@ConfigurationProperties(前缀=“datasource.primary”)
公共数据源primaryDataSource(){
System.out.println(列表+“===================”);
返回DataSourceBuilder.create().build();
}
@豆子
@ConfigurationProperties(前缀=“datasource.secondary”)
公共数据源secondaryDataSource(){
返回DataSourceBuilder.create().build();
}
@Bean(name=“entityManagerFactory”)
@初级的
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
EntityManagerFactoryBuilder(建筑商){
返回生成器
.dataSource(primaryDataSource())
.packages(“com.opallios.ode.model”)
.持久性单位(“主要”)
.properties(buildProperties())
.build();
}
@Bean(name=“secondaryEntityManagerFactory”)
公共LocalContainerEntityManagerFactoryBean第二实体管理器工厂(
EntityManagerFactoryBuilder(建筑商){
返回生成器
.dataSource(secondaryDataSource())
.packages(“com.opallios.ode.model”)
.persistenceUnit(“二级”)
.properties(buildProperties())
.build();
}
私有映射buildProperties(){
//这通常由HibernateJpaAutoConfiguration设置
映射属性=新的HashMap();
properties.put(“hibernate.ejb.naming_策略”,
改进的NamingStrategy.class.getName());
归还财产;
}
@豆子
@自动连线
@限定词(“第二实体管理工厂”)
公共平台transactionManager transactionManager(EntityManager工厂emf){
JpaTransactionManager txManager=新的JpaTransactionManager();
txManager.setEntityManagerFactory(emf);
返回txManager;
}
@豆子
@自动连线
@限定符(“entityManagerFactory”)
公共平台TransactionManager TransactionManager(EntityManager工厂emf){
JpaTransactionManager txManager=新的JpaTransactionManager();
txManager.setEntityManagerFactory(emf);
返回txManager;
} 
@豆子
公共ServletRegistrationBean h2servletRegistration(){
ServletRegistrationBean registration=newServletRegistrationBean(newWebServlet());
Map params=新的HashMap();
参数put(“webAllowOthers”,h2WebAllow);
registration.setInitParameters(params);
registration.addUrlMappings(“/console/*”);
申报登记;
}在这里输入代码
这是个例外 org.springframework.beans.factory.BeanCreationException:创建名为“springSecurityFilterChain”的bean时出错


我想要所有的建议,如果有的话,我想要一个simpel代码,其中可以配置mysql和h2db,并且可以从db获取数据

请发布stacktrace。你解决了这个问题吗?我得到了相同的配置,当我运行SpringBoot应用程序时,它对mysql非常有效,但当我尝试对H2运行集成测试时,主数据源工作,而次数据源不工作。如果我将集成测试改为使用Mysql,那么数据源和测试用例都可以使用。请发布stacktrace。您是否设法解决了这个问题?我得到了相同的配置,当我运行SpringBoot应用程序时,它对mysql非常有效,但当我尝试对H2运行集成测试时,主数据源工作,而次数据源不工作。如果我将集成测试改为使用Mysql,那么数据源和测试用例都可以使用。