2016-04-25 4 views
0

Я использую Spring Boot в первый раз и с помощью xml less config.Свойства Spring не загружаются

Пытается добавить значение свойства свойства в мой класс bean, но получает значения null. Вот мой код:

config.java:

import java.sql.SQLException; 

import javax.annotation.PostConstruct; 
import javax.sql.DataSource; 

import oracle.jdbc.pool.OracleDataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.context.properties.EnableConfigurationProperties; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 
import org.apache.commons.dbcp2.BasicDataSource; 
import org.springframework.stereotype.Component; 

@Configuration 
@ComponentScan 
@PropertySource("classpath:application.properties") 
public class Config { 

    @Autowired 
    private static SpringAppProp springAppProp; 





    @Value("${url}") 
    private static String url; 

    @Value("${driverClassName}") 
    private static String driverClassName; 

    @Value("${username}") 
    private static String username; 

    @Value("${password}") 
    private static String password; 

    @Value("${initialSize}") 
    private static int initialSize; 

    @Value("${maxActive}") 
    private static int maxActive; 

    @Value("${dbPort}") 
    private static int dbPort; 

    @Value("${dbServiceName}") 
    private static String dbServiceName; 

    @Value("${dbServer}") 
    private static String dbServer; 



    @Bean 
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
    @Bean(name = "DataSource") 
    public static BasicDataSource dataSource() throws SQLException { 
     BasicDataSource basicDataSource = new BasicDataSource(); 
     basicDataSource.setUrl(url); 
     basicDataSource.setDriverClassName(driverClassName); 
     basicDataSource.setInitialSize(initialSize); 
     basicDataSource.setMaxTotal(maxActive); 
     basicDataSource.setMaxIdle(5); 
     basicDataSource.setMinIdle(0); 
     basicDataSource.setMaxWaitMillis(15000); 
     return basicDataSource; 
     } 

} 

application.properties:

server.port=8080 
driverClassName=oracle.jdbc.driver.OracleDriver 
username=XXXX 
password=XXXX 
initialSize=10 
maxActive=20 
dbPort=XXX 
dbServiceName=xxxx 
dbServer=xxxxxx 
url=jdbc:oracle:[email protected]//xxxxx 

Может кто-то видеть и дайте мне знать, что я делаю неправильно здесь ..

+2

Сначала сбросьте статику, а затем удалите весь свой класс. Вы используете Spring Boot, который уже настраивает 'DataSource' и уже читает' application.properties'. Работайте с каркасом, а не вокруг него. –

+0

Как я могу это сделать .. Можете ли вы дать мне рабочий код .. Также мне понадобятся проаутивы, чтобы прочитать некоторые другие свойства, кроме источника данных –

ответ

2

Добавьте static с полей, которые вы добавили в аннотация: Value:

@Value("${url}") 
private String url; 

@Value("${driverClassName}") 
private String driverClassName; 

И поскольку вы используете Spring Boot, нет необходимости в @PropertySource.

Update Как сказал М. Deinum, то лучше отказаться от вашего класса конфигурации в целом и использовать spring.datasource.* свойства в вашем application.properties.

+0

server.port = 8080 spring.datasource.driverClassName = oracle.jdbc.driver.OracleDriver spring.datasource.username = ххх spring.datasource.password = хххх # removeAbandoned = истинная spring.datasource.initialSize = 10 spring.datasource.maxActive = 20 spring.datasource.dbPort = хххх spring.datasource.dbServiceName = xxxxxx spring.datasource.dbServer = xxxxxxx spring.datasource.url = xxxxx # management.port = 9080 И код был изменен следующим образом @Value ("$ {spring.datasource.url}") \t public String DBurl; \t @Value ("$ {spring.datasource.driverClassName}") \t public String driverClassName1; Но все же значение приближается как null –

+0

После использования свойств 'spring.datasource. *' Нет необходимости вводить их в другой класс, Spring создаст экземпляр 'DataSource' для вас, –

+1

Спасибо за ответ –

Смежные вопросы