Spring, файл свойств чтения вне пути к классу - PullRequest
0 голосов
/ 02 мая 2018

У меня есть файл свойств, расположенный в папке tomcat. Я пытаюсь прочитать содержимое файла свойств следующим образом. Но я получаю нулевое значение для значения свойства.

путь к файлу не имеет проблем.

@ComponentScan(basePackages = "org.sakaiproject.log.api")
@Configuration
@PropertySource(name = "props", value = {
        "file:/home/tomcat-sakai-7.0.55/sakai/local.properties",
        "file:/home/tomcat-sakai-7.0.55/sakai/sakai.properties" })
public class SpringCryptoContext {



    @Value("${aes.encryption.cipherString}")
    private static String cyperString;

    public SpringCryptoContext() {

    }



    public static void main(String[] args) throws Exception {

        ApplicationContext context = new AnnotationConfigApplicationContext(
                SpringCryptoContext.class);


        System.out.println(cyperString);


    }
}

Edit:

Я создал отдельный класс и загрузил свойства следующим образом.

@Service
@PropertySource(name = "locations", value = {
        "file:/home/nirmala/projects/iml/tomcat-sakai-7.0.55/sakai/local.properties",
        "file:/home/nirmala/projects/iml/tomcat-sakai-7.0.55/sakai/sakai.properties" })
public class CryptoToolImpl implements CryptoTool {

    private Cipher cipher = null;
    private Key key = null;
    @Value("${pii.encryption.cipherString}")
    private String cipherString = "";

    public static final Logger log = Logger.getLogger(CryptoToolImpl.class);

    public IMLCryptoToolImpl() {
        try {
            fixKeyLength();


            cipher = Cipher.getInstance(cipherString);
            key = KMSKeyStoreSingleton.getInstance().getPrivateKey();

        } catch (Exception e) {
            log.error("Error in initializing CryptoToolImpl : "
                    + e.getMessage());
        }

    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigDev() {
        return new PropertySourcesPlaceholderConfigurer();
    }

}

но я получаю следующую ошибку

Ошибка при инициализации CryptoToolImpl: неверный формат преобразования:

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Что-то ниже должно помочь.

@Configuration
@PropertySources(value={
    @PropertySource(value="file:${catalina.home}/sakai/local.properties"),
    @PropertySource(value="file:${catalina.home}/sakai/sakai.properties")
})
public class SpringCryptoContext {

    @Value("${aes.encryption.cipherString}")
    private String cyperString;
}
0 голосов
/ 02 мая 2018

Пожалуйста, добавьте следующий bean-компонент в ваш класс конфигурации: -

//To resolve values using the @Value
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigDev() {
    return new PropertySourcesPlaceholderConfigurer();
}

Обновление

static не будет работать в этом случае, вам нужно сделать следующее: -

Добавьте следующий код: -

@Value("${aes.encryption.cipherString}")
private String cyperString;

public String getCypherString(){
    return this.cyperString;
}

Это просто пример, но вы используете статический, потому что вы обращаетесь к нему в main method, который является static, и для доступа к переменной вы пометили его static

Проблема в том, что статическая переменная - это переменная класса, у которой нет свойства, когда код достигает вашей строки System.out для переменной. В настоящее время spring все еще выполняет внутреннюю инициализацию и т. Д.

Вы используете / используете переменную в качестве не пружинного фреймворка, когда вы создаете экземпляр с помощью Spring Это должно быть только в одну сторону

И я бы предложил иметь отдельный класс для загрузки этих переменных в контекст, может быть какой-то класс помечен @Component или, более конкретно, @Service

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...