Spring boot 2 IllegalArgumentException: свойство ‘driverClassName’ не должно быть пустым

#spring-boot #hikaricp

#spring-boot #hikaricp

Вопрос:

Я пытаюсь установить 2 подключения к базе данных в приложении spring boot 2. Я получаю сообщение об ошибке ниже:

 java.lang.IllegalArgumentException: Property 'driverClassName' must not be empty
  

Вот моя конфигурация на первичной базе данных

 @Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "myEntityManagerFactory",
    basePackages = {"com.cmp.myapp.repository"})
 public class PrimDBConfig {

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

@PersistenceContext(unitName = "primdb")
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
        EntityManagerFactoryBuilder builder,
        @Qualifier("primaryDataSource") DataSource dataSource) {
    return builder
            .dataSource(dataSource)
            .packages("com.cmp.myapp.dto")
            .persistenceUnit("primdb")
            .build();
}

@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
        @Qualifier("myEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
}
}
  

Вот вторичное подключение к БД

 @Configuration
public class SecDBConfig {

@Autowired
Environment env;

@Bean(name = "secDataSource")
@ConfigurationProperties(prefix = "secondary.datasource")
public DataSource wiseDataSource() {
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setUrl(env.getProperty("secondary.datasource.jdbc-url"));
    ds.setDriverClassName(env.getProperty("secondary.datasource.driverClassName"));
    ds.setUsername(env.getProperty("secondary.datasource.username"));
    ds.setPassword(env.getProperty("secondary.datasource.password"));
    return ds;
}
}
  

Файл My application.properties, как показано ниже:

 spring.datasource.jdbc-url=jdbc:sqlserver://xxx
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.validation-query=select 1
spring.datasource.testOnBorrow=true

secondary.datasource.jdbc-url=jdbc:as400://xxxxxx;
secondary.datasource.driverClassName=com.ibm.as400.access.AS400JDBCDriver
secondary.datasource.username=xxxxx
secondary.datasource.password=xxxxxx
secondary.datasource.testOnBorrow=true
secondary.datasource.validation-query=select 1 from sysibm.sysdummy1
  

Могу ли я узнать, что я здесь делаю не так, пожалуйста, посоветуйтесь. Заранее спасибо

Ответ №1:

Одна из причин, о которых я могу думать, заключается в том, что вы добавили этот префикс

  @ConfigurationProperties(prefix = "secondary.datasource")
  

Затем доступ к driverClassName с использованием полного пути

 ds.setDriverClassName(env.getProperty("secondary.datasource.driverClassName"));
  

Я думаю, вам следует удалить префикс и попытаться получить доступ.
Этот блог также может вам помочь. https://howtodoinjava.com/spring-boot2/datasource-configuration /

Комментарии:

1. Я заметил, что env properties возвращал значение null, но когда я жестко закодировал значения, оно по-прежнему выдавало ту же ошибку. Это сработало, когда я попробовал ваш способ сделать это через ваш блог, спасибо вам за это — действительно оценил, но не уверен, в чем реальная проблема в том, как я это делал!