Подтвердить что ты не робот

Spring Загрузочное приложение, не читающее файл application.properties при использовании теста Maven

UPDATE:

Я понял пару вещей сейчас. Файл application.properties загружается правильно, потому что я проверил по пути /env (спасибо Dave), что мои свойства БД загружаются. Проблема заключается в том, что когда я запускаю ее с помощью подключаемого модуля Spring Boot maven, он не может инициализировать мой источник данных.

mvn spring-boot:run

Это приводит к тому, что мое приложение вызывается с ошибками, потому что другой beans не может быть инициализирован. Странно, что он отлично работает от Eclipse.

У меня есть класс под названием DataService, который расширяет JdbcTemplate. В моем конструкторе DataService я вставляю Datasource.

@Component
public class DataService extends JdbcTemplate  {

    @Autowired
    public DataService(DataSource dataSource){
        super(dataSource);
    }
    ...more custom methods
}

Я использую этот класс DataService в другом beans для выполнения операций БД. Мой DataSource определен в моем application.properties файле

spring.datasource.url: jdbc:h2:tcp://localhost/~/testdb2
spring.datasource.driverClassName: org.h2.Driver

Это мой класс Application.java

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableWebMvcSecurity
@EnableAsync
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }    
}

Я впервые понял это, когда пытался выполнить тесты jUnit из Maven, используя

mavent test

Я думал, что это просто связано с тем, как он выполнял тестовые примеры junit, но это также происходит, когда я просто пытаюсь запустить приложение с помощью maven.

Мой тестовый класс JUnit4 определяется следующим образом:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={Application.class})
@WebAppConfiguration
public class QuestionRepositoryIntegrationTests {
     ...methods
}

Я использовал пример из Spring инструкций для загрузки как http://projects.spring.io/spring-boot/docs/docs/howto.html)

Когда я запускаю этот класс JUnit из Eclipse, он работает отлично. Когда он выполняется из maven, он начинает действовать, как описано выше.

4b9b3361

Ответ 1

Попробуйте определить тег <resources> в разделе сборки в вашем pom, установив путь для каталога ресурсов, где application.properties:

<build>
        <resources>
            <resource>
                <directory>resources</directory>
                <targetPath>${project.build.outputDirectory}</targetPath>
                <includes>
                    <include>application.properties</include>
                </includes>
            </resource>
        </resources>
</build>

Ответ 2

Вы можете настроить свой основной источник данных следующим образом: здесь я использую mysql. Но вы можете использовать свой собственный источник данных. вы можете настроить следующее в application.properties внутри src/main/resources

spring.datasource.url = jdbc:mysql://localhost:3306/dsm
spring.datasource.username = root
spring.datasource.password = admin123
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

чтобы запустить тест внутри вашего приложения  может использовать один и тот же источник данных или создавать application-test.properties внутри src/test/resources и его можно настроить там источник тестовых данных.

Ответ 3

Убедитесь, что в аннотации @ConfigurationProperties установлен тот же префикс, что и все, что вы используете в файле конфигурации (application.config)

Ответ 4

Это работает для меня:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
    ...
}

Ответ 5

Просто добавьте следующее утверждение;

@TestPropertySource("classpath:application.properties")

К вашему тестовому классу. Я предполагаю, что у вас есть файл application.properties в каталоге src/test/resources

Вот мой рабочий пример;

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:application.properties")
public class TestTwitterFeedRoute extends CamelTestSupport {
//...
}

Ответ 6

Если вы используете eclipse, всегда полезно проверить ресурсы сборки проектов. (Rclick project-> properties-> путь сборки) Я не получил свой файл application.properties и выяснил, что просто пропустил его добавление в ресурсы сборки.