Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot Application not reading application.properties file when using Maven test

UPDATE:

I realized a couple of things now. My application.properties file is being loaded properly because I verified via the /env path (thanks Dave) that my DB properties are being loaded. The problem appears to be that when I run it using the Spring Boot maven plug-in,it fails to initialize my dataSource.

mvn spring-boot:run

This then causes my application to blow-up with errors because other beans can't get initialized. The odd thing is it runs fine from Eclipse.

I have a class called DataService that extends JdbcTemplate. In my DataService constructor, I inject the Datasource.

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

I use this DataService class in other beans to perform DB operations. My DataSource is defined in my application.properties file

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

This is my Application.java class

@Configuration @ComponentScan @EnableAutoConfiguration @EnableWebMvcSecurity @EnableAsync @EnableScheduling public class Application {      public static void main(String[] args) {         SpringApplication.run(Application.class, args);     }     } 

I first realized this when I was attempting to run jUnit tests from Maven using

mavent test 

I thought it just had to do with how it was executing the junit test cases however it is also occurring when I simple try to run the application using maven.

My JUnit4 test class is defined as follows:

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

I used the example from the Spring Boot how-to docs (http://projects.spring.io/spring-boot/docs/docs/howto.html)

When I run this JUnit class from Eclipse, it works just fine. When it executes from maven, it starts to act up as I described above.

like image 266
John F. Avatar asked Feb 27 '14 19:02

John F.


People also ask

How do I read test properties in spring boot?

You can use @TestPropertySource annotation in your test class. Just annotate @TestPropertySource("classpath:config/mailing. properties") on your test class. You should be able to read out the property for example with the @Value annotation.

Where does spring boot look for property file in test?

properties file in the classpath (src/main/resources/application. properties).

How does spring boot pick up application properties?

Spring Boot loads the application. properties file automatically from the project classpath. All you have to do is to create a new file under the src/main/resources directory. The application.


2 Answers

Try to define the <resources> tag in the build section in your pom, setting path for resource directory where is application.properties:

<build>         <resources>             <resource>                 <directory>resources</directory>                 <targetPath>${project.build.outputDirectory}</targetPath>                 <includes>                     <include>application.properties</include>                 </includes>             </resource>         </resources> </build> 
like image 130
Antonino Barila Avatar answered Sep 24 '22 03:09

Antonino Barila


You can configure your main datasource as the following, I'm using mysql here. But you can use your own datasource. you can configure the following in your application.properties inside 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 

to run test inside your application you can either use the same datasource or create application-test.properties inside src/test/resources and its possible to configure test data source over there.

like image 35
nijogeorgep Avatar answered Sep 25 '22 03:09

nijogeorgep