java Spring Boot 两个数据库

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31911323/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 19:20:54  来源:igfitidea点击:

Spring Boot two databases

javaspring-boot

提问by Fabio Ebner

I trying to configure 2 databases on my app but withou success.

我试图在我的应用程序上配置 2 个数据库,但没有成功。

I have do this:

我已经这样做了:

my application.properties

我的 application.properties

#BANCO
spring.jpa.database=POSTGRESQL
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect


#spring.datasource.driverClassName=org.postgresql.Driver
datasource.dbdnaso.driver-class-name=org.postgresql.Driver
datasource.dbdnaso.platform=postgres
datasource.dbdnaso.url=jdbc:postgresql://localhost:5432/db_dnaso
datasource.dbdnaso.username=postgres
datasource.dbdnaso.password=dna44100


datasource.dbregistro.platform=postgres
datasource.dbregistro.driver-class-name=org.postgresql.Driver
datasource.dbregistro.url=jdbc:postgresql://localhost:5432/db_registro
datasource.dbregistro.username=postgres
datasource.dbregistro.password=dna44100

My DbRegistroConfiguration.java

我的 DbRegistroConfiguration.java

@Configuration
@EnableJpaRepositories(basePackages = "br.com.lumera.data.dbregistro", entityManagerFactoryRef = "dbRegistroEntityManagerFactory", transactionManagerRef = "dbRegistroTransactionManager")
@EnableTransactionManagement
public class DbRegistroConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "datasource.admin")
    @Primary
    public DataSource dbRegistroDataSource()
    {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean dbRegistroEntityManagerFactory(final EntityManagerFactoryBuilder builder)
    {
        return builder
                .dataSource(dbRegistroDataSource())
                .packages("br.com.lumera.data.dbregistro")
                .persistenceUnit("dbRegistroPersistenceUnit")
                .build();
    }

    @Bean
    @Primary
    public JpaTransactionManager dbRegistroTransactionManager(@Qualifier("dbRegistroEntityManagerFactory") final EntityManagerFactory factory)
    {
        return new JpaTransactionManager(factory);
    }
}

My DbDnasoConfiguration.java

我的 DbDnasoConfiguration.java

@Configuration
@EnableJpaRepositories(basePackages = "br.com.lumera.data.dbdnaso", entityManagerFactoryRef = "dbDnasoEntityManagerFactory", transactionManagerRef = "dbDnasoTransactionManager")
@EnableTransactionManagement
public class DbDnasoConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "datasource.dbdnaso")
    public DataSource dbDnasoDataSource()
    {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean dbDnasoEntityManagerFactory(final EntityManagerFactoryBuilder builder)
    {
        return builder
                .dataSource(dbDnasoDataSource())
                .packages("br.com.lumera.data.dbdnaso")
                .persistenceUnit("dbDnasoPersistenceUnit")
                .build();
    }

    @Bean
    public JpaTransactionManager dbDnasoTransactionManager(@Qualifier("dbDnasoEntityManagerFactory") final EntityManagerFactory factory)
    {
        return new JpaTransactionManager(factory);
    }
}

my Application.java

我的 Application.java

@Configuration
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication
@EnableConfigurationProperties
@EnableTransactionManagement
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

And my 2 Repostory ITbItemPendencia

还有我的 2 Repository ITbItemPendencia

@Repository
public class ITbItemPendencia{

    @PersistenceContext(unitName = "dbDnasoPersistenceUnit")
    EntityManager em;

    public Integer getTbItemPendenciaByNmNaturezaTabelaCusta() {
        return this.em.createQuery("Select t FROM TbItemPendencia t").getResultList().size();
    }

}

IViewPendenciasImovelPC

IViewPendenciasImovelPC

@Repository
public class IViewPendenciasImovelPC {

    @PersistenceContext(unitName = "dbRegistroPersistenceUnit")
    EntityManager em;

    public Integer total(){
        return em.createQuery("SELECT t FROM ViewPendenciasImovelPC t ").getResultList().size();
    }
}

When I try to start my app I got this error:

当我尝试启动我的应用程序时,出现此错误:

0 00:38:24.841  WARN 7464 --- [           main] o.a.tomcat.jdbc.pool.PooledConnection    : Not loading a JDBC driver as driverClassName property is null.
2015-08-10 00:38:24.852 ERROR 7464 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

java.sql.SQLException: The url cannot be null
    at java.sql.DriverManager.getConnection(DriverManager.java:649)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:305)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:142)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:279)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:124)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.perform(EntityManagerFactoryBuilderImpl.java:857)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.perform(EntityManagerFactoryBuilderImpl.java:850)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
    at br.com.lumera.Application.main(Application.java:39)

but my app up, if I try to execute my iViewPendenciasImovelPC.total I got the same error, but my ITbItemPendencia.getTbItemPendenciaByNmNaturezaTabelaCusta works fine.

但是我的应用程序启动,如果我尝试执行我的 iViewPendenciasImovelPC.total 我得到了同样的错误,但我的 ITbItemPendencia.getTbItemPendenciaByNmNaturezaTabelaCusta 工作正常。

can someone help me? tks

有人能帮我吗?tks

采纳答案by Eddú Meléndez

As I can see in DbRegistroConfiguration.javayou must change @ConfigurationProperties(prefix = "datasource.admin")by @ConfigurationProperties(prefix = "datasource.dbregistro").

正如我所看到的,DbRegistroConfiguration.java您必须更改@ConfigurationProperties(prefix = "datasource.admin")@ConfigurationProperties(prefix = "datasource.dbregistro").

回答by Stephane Nicoll

This demo projectshould give you enough information.

这个演示项目应该给你足够的信息。