4

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

I have do this:

my 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

@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

@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

@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

@Repository
public class ITbItemPendencia{

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

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

}

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$4.perform(EntityManagerFactoryBuilderImpl.java:857)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.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$1.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.

can someone help me? tks

2 Answers 2

3

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

Sign up to request clarification or add additional context in comments.

3 Comments

Tks Eddu, I let this detail pass :D
Eddu, do you know how I use tomcat datasource? with 2 database. tks
@FabioEbner I have the same issue "java.sql.SQLException: The url cannot be null" when using the two databases as you have mentioned and running it via maven. IntelliJ build goes through fine. I am not sure why is the case. Any help would be greatly appreaciated. Thanks.
2

This demo project should give you enough information.

1 Comment

I have tried the same approach, however whenever I try to run the spring boot app. I get the "java.sql.SQLException: The url cannot be null" error. When I build from IntelliJ (non-maven build) it works fine in local, but not when I do "mvn spring-boot:run". When it tries to start the tomcat, it comes up with this issue. I am a bit stuck with this.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.