Как использовать 2 или более jdbcTemplate с spring-boot? - PullRequest
0 голосов
/ 07 мая 2018

Я хочу использовать 2 или более jdbcTemplate в моем проекте с использованием application.properties. Я пытаюсь получить исключение времени выполнения.

########## My application.properties:-
     spring.datasource.driver-class-name=com.mysql.jdbc.Driver
     spring.datasource.url=jdbc:mysql://localhost:3306/ccm_new
     spring.datasource.username=test
     spring.datasource.password=test

      spring.oracledatasource.url=jdbc:oracle:thin:@localhost:1521:mastera
   spring.oracledatasource.password=test
   spring.oracledatasource.username=test
   spring.oracledatasource.driver-class-name=oracle.jdbc.driver.OracleDriver

     @Bean(name = "dsMaster") ############
     @Primary
     @ConfigurationProperties(prefix="spring.oracledatasource")
     public DataSource primaryDataSource() {
     return DataSourceBuilder.create().build();
    }

      @Bean(name = "jdbcMaster") #############
        public JdbcTemplate masterJdbcTemplate(@Qualifier("dsMaster") DataSource dsMaster)
           {
       return new JdbcTemplate(dsMaster);
      }
################ Я обычно использую соединение mysql, но при использовании соединения оракула я получил

org.springframework.jdbc.CannotGetJdbcConnectionException: Не удалось получить соединение JDBC;Вложенное исключение: java.sql.SQLException: невозможно создать драйвер JDBC класса '' для URL-адреса соединения 'null' в org.springframework.jdbc.datasource.DataSourceUtils.getConnection (DataSourceUtils.java:81) в org.springframework.jdbc.core.JdbcTemplate.execute (JdbcTemplate.java:371) в org.springframework.jdbc.core.JdbcTemplate.query (JdbcTemplate.java:446) в org.springframework.jdbc.core.JdbcTempjjenter code here

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я понял, где ошибаюсь, я хочу установить mysql-соединение через application.properties без конфигурации @bean.Если вы хотите использовать 2 или более подключения, вам просто нужно определить все источники данных с их @ConfigurationProperties (prefix = «spring.mysqldatasource») другой префикс, отличный от «spring.datasource» .prifix «spring.datasource» используется только тогда, когда нам нужно установить соединение только с одной базой данных. Вот последний пример рабочего кода: -

application.properties

spring.mysqldatasource.driver-class-name=com.mysql.jdbc.Driver
 spring.mysqldatasource.url=jdbc:mysql://localhost:3306/ccm_new
 spring.mysqldatasource.username=test
 spring.mysqldatasource.password=test
 spring.mysqldatasource.dbcp2.initial-size=5
 spring.mysqldatasource.dbcp2.max-total=15
 spring.mysqldatasource.dbcp2.pool-prepared-statements=true



spring.oracledatasource.url=jdbc:oracle:thin:@localhost:1521:mastera
spring.oracledatasource.password=test
spring.oracledatasource.username=test
spring.oracledatasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.oracledatasource.dbcp2.initial-size=5
spring.oracledatasource.dbcp2.max-total=15
spring.oracledatasource.dbcp2.pool-prepared-statements=true



 @Configuration
 public class PrototypeUtility {
 @Bean(name = "dsMaster")
@Primary
@ConfigurationProperties(prefix="spring.oracledatasource")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcMaster")
public JdbcTemplate masterJdbcTemplate(@Qualifier("dsMaster") DataSource dsMaster) {
      return new JdbcTemplate(dsMaster);
}

@Bean(name = "dsMasterMysql")
@ConfigurationProperties(prefix="spring.mysqldatasource")
public DataSource primaryDataSourceMysql() {
    return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcMasterMysql")
public JdbcTemplate masterMysqlJdbcTemplate(@Qualifier("dsMasterMysql") DataSource dsMasterMysql) {
      return new JdbcTemplate(dsMasterMysql);
}
  }
0 голосов
/ 08 мая 2018

Я понял, где ошибаюсь, я хочу установить mysql-соединение через application.properties без конфигурации @bean.Если вы хотите использовать 2 или более подключения, вам просто нужно определить все источники данных с их @ConfigurationProperties (prefix = «spring.mysqldatasource») другой префикс, отличный от «spring.datasource» .prifix «spring.datasource» используется только тогда, когда нам нужно установить соединение только с одной базой данных. Вот последний пример рабочего кода: -

application.properties

 spring.mysqldatasource.driver-class-name=com.mysql.jdbc.Driver
 spring.mysqldatasource.url=jdbc:mysql://localhost:3306/ccm_new
 spring.mysqldatasource.username=test
 spring.mysqldatasource.password=test
 spring.mysqldatasource.dbcp2.initial-size=5
 spring.mysqldatasource.dbcp2.max-total=15
 spring.mysqldatasource.dbcp2.pool-prepared-statements=true



spring.oracledatasource.url=jdbc:oracle:thin:@localhost:1521:mastera
spring.oracledatasource.password=test
spring.oracledatasource.username=test
spring.oracledatasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.oracledatasource.dbcp2.initial-size=5
spring.oracledatasource.dbcp2.max-total=15
spring.oracledatasource.dbcp2.pool-prepared-statements=true



 @Configuration
 public class PrototypeUtility {
 @Bean(name = "dsMaster")
@Primary
@ConfigurationProperties(prefix="spring.oracledatasource")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcMaster")
public JdbcTemplate masterJdbcTemplate(@Qualifier("dsMaster") DataSource dsMaster) {
      return new JdbcTemplate(dsMaster);
}

@Bean(name = "dsMasterMysql")
@ConfigurationProperties(prefix="spring.mysqldatasource")
public DataSource primaryDataSourceMysql() {
    return DataSourceBuilder.create().build();
}
@Bean(name = "jdbcMasterMysql")
public JdbcTemplate masterMysqlJdbcTemplate(@Qualifier("dsMasterMysql") DataSource dsMasterMysql) {
      return new JdbcTemplate(dsMasterMysql);
}
  }

и затем я автоматически подключил оба соединения: -

     @Autowired
      private JdbcTemplate jdbcMasterMysql;

     @Autowired
     public JdbcTemplate jdbcMaster;

Этот код успешно запущен для меня. Если у кого-то есть сомнения, не стесняйтесь спрашивать.

...