#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, но когда я жестко закодировал значения, оно по-прежнему выдавало ту же ошибку. Это сработало, когда я попробовал ваш способ сделать это через ваш блог, спасибо вам за это — действительно оценил, но не уверен, в чем реальная проблема в том, как я это делал!