I have a spring boot REST service with the following structure:
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── daos
│ │ │ ├── db
│ │ │ │ └── DBConnector.java
│ │ │ ├── serviceComponents
│ │ │ │ └── serviceResources
│ │ │ │ ├── Application.java
│ │ │ │ ├── UserController.java
│ │ │ │ └── UserDAO.java
│ │ │ └── serviceRepresentations
│ │ │ └── User.java
│ │ └── resources
│ │ └── application.properties
The main files related to this question are:
Application.java
:
package serviceComponents.serviceResources;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
@ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
DBConnector.java
:
package db;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class DBConnector {
@Value("${current.app.url}")
String dbUrl;
@Value("${current.app.sid}")
String dbSid;
@Value("${current.app.port}")
String dbPort;
@Value("${current.app.user}")
String dbUser;
@Value("${current.app.password}")
String dbPassword;
String jdbcUrl = String.format("jdbc:oracle:thin:@%s:%s:%s", dbUrl, dbPort, dbSid);
Connection conn;
int count = 0;
public DBConnector() {}
@PostConstruct
private void init() {
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
OracleDataSource ds = null;
try {
ds = new OracleDataSource();
} catch (SQLException e) {
e.printStackTrace();
}
ds.setURL(jdbcUrl);
try {
conn = ds.getConnection(dbUser, dbPassword);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getDBConnection() throws SQLException {
if (count == 0) {
init();
count++;
}
return conn;
}
}
And the properties
file:
server.port = 8089
test.app.url = 127.0.0.1
test.app.sid = XE
test.app.port = 1521
test.app.user = foouser
test.app.password = barbazpass
current.app.url = test.app.url
current.app.sid = test.app.sid
current.app.port = test.app.port
current.app.user = test.app.user
current.app.password = test.app.password
And there is the relevant piece of code from the controller:
@RestController
@RequestMapping("/v1/user/")
public class UserController {
DBConnector dbConnector = new DBConnector();
UserDAO userDAO = new UserDAO(dbConnector);
However when I run the application, the fields from DBConnector.java
annotated with @Value
are not populated with the expected values from the configuration file. I know that spring boot detects application.properties
as the default configuration file for a project. What am I doing wrong?