#java #spring #spring-boot
Вопрос:
Мой тест весенней загрузки выдает ошибку ниже во время сборки maven.
"level":"ERROR","logger":"com.zaxxer.hikari.HikariConfig","msg":"HikariPool-1 - jdbcUrl is required with driverClassName."
Трассировка стека:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerFactoryBean' defined in class path resource
[com/pit/SchedulerConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: jdbcUrl is requir
ed with driverClassName.
Caused by: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
Метод, который выдает ошибку в моем MyApplicationTest.java
@SpringBootTest
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@EnableConfigurationProperties(value = MyConfig.class)
class MyApplicationTest {
@Test
void contextLoads() {
assertNotNull(myController);
}
}
У моего pom есть эти зависимости в пути к классу.
- пружинный загрузчик-стартер-веб
- пружинный загрузчик-стартер-тест
- весенняя интеграция-sftp
- postgresql
- джунит
- кварцевый планировщик
Мой компонент источника данных настроен следующим образом
@Configuration
public class MyDataSourceCfg {
private DataSource appDataSource() {
return DataSourceBuilder.create()
.driverClassName("org.postgresql.Driver")
.url(env.getProperty("url") // values are set from Environment
.username(env.getProperty("user"))
.password(env.getProperty("password")
.build();
}
}
Пожалуйста, расскажите мне, что происходит и как мне избежать этой ошибки. Я читал о настройке источника данных по-другому, если у вас несколько баз данных, но у меня только одна база данных postgres. Пожалуйста, поделитесь своими мыслями.
Комментарии:
1.
.url(env.getProperty("url")
похоже, что URL-адрес JDBC не содержит «jdcb: …». Ошибка часто находится в строке с комментарием.2. @JoopEggen Свойства извлекаются из хранилища и помещаются в среду во время запуска. «jdbc:postgresql://…» — это то, как я его настроил. Я могу запустить приложение и запустить его, если пропущу тесты во время сборки.
3. Может быть, модульные тесты имеют другую конфигурацию? У Spring часто есть контекст приложения и тест контекста приложения. И тесты часто идут против другой базы данных.
4.
[ERROR] contextLoads Time elapsed: 0 s <<< ERROR! java.lang.IllegalStateException: Failed to load ApplicationContext
то, что я вижу чуть выше ошибки стека. Поставили тестовый класс в вопрос. В классе нет ничего другого, кроме одного другого проводного боба.5. Извините, здесь я ничем не могу помочь. Вы можете начать с жестко закодированных строк:
.url("jdbc: ...")
, и ведения журнала.
Ответ №1:
Учитывая, что у вас есть все соответствующие зависимости. как подключиться к базе данных PostgreSQL с помощью Spring Data JPA, например :-
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
и в application.properties
файле:
spring.datasource.url=jdbc:postgresql://localhost:5432/dev
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL81Dialect
Благодаря мощной автоконфигурации SpringBoot вам не нужно явно создавать компонент источника данных, и если вы хотите, используйте эти значения свойств.
Комментарии:
1. Я мог бы использовать это, если бы знал, как получить доступ к свойствам из класса среды в файле yaml приложения, поскольку все значения помещаются на карту окружающей среды во время запуска из другого источника. Также следует отметить, что проблема решается, когда я жестко закодировал детали.