Hi I want to use a DBAppender
in my Spring Boot application. I want to retrieve database connection properties from the application.properties
file. However it doesn't seem to recognize them.
Keep in mind that I'm using Spring Boot 1.2.x
so I can't use logback-spring.xml
yet.
The configuration I'm using is the following:
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>${spring.datasource.driver-class-name}</driverClass>
<url>${spring.datasource.url}</url>
<user>${spring.datasource.username}</user>
<password>${spring.datasource.password}</password>
</connectionSource>
</appender>
Stumbled upon this while searching for a similar solution. Since this is still unanswered, here's a few approaches I found:
1) If you are using Spring Boot 1.3+ (which you already pointed out you're not but for future reference), I managed to use the <springProperty> tag to reuse the same values from application.properties.
application.properties (for embedded H2 DB):
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
logback-spring.xml:
<springProperty name="spring.datasource.driverClassName" source="spring.datasource.driverClassName"/>
<springProperty name="spring.datasource.url" source="spring.datasource.url"/>
<springProperty name="spring.datasource.username" source="spring.datasource.username"/>
<springProperty name="spring.datasource.password" source="spring.datasource.password"/>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>${spring.datasource.driverClassName}</driverClass>
<url>${spring.datasource.url}</url>
<user>${spring.datasource.username}</user>
<password>${spring.datasource.password}</password>
</connectionSource>
</appender>
2) Import application properties as property source: Unable to use Spring Property Placeholders in logback.xml
<property resource="application.properties" />
3) Maybe you're able to register the Datasource in the container JNDI and use logback's JNDIConnectionSource instead? Check out this other post: How to create JNDI context in Spring Boot with Embedded Tomcat Container