2016-06-09 3 views
0

редактировать примечание: во время отладки, autowired объект конфигурации в главном классе всегда возвращается нульне может получить свойства с помощью пружинных

Я пытаюсь создать простое приложение пружинный с классом Configuration и основным классом, который в основном получает значения из внешний файл application.properties, который будет использоваться в основном классе. Поскольку я новичок в весне, возможно, я пропустил что-то основное, поэтому я ценю любую помощь. Спасибо заранее.

Вот application.properties (который находится в той же папке, что и файл Config.java)

kinesis.consumer.transaction.streamName = sample-stream-name 
kinesis.consumer.transaction.applicationName = sample-application-name 

И Config.java файл

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; 


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

    @Value("${kinesis.consumer.transaction.streamName}") 
    private 
    String transactionStreamName; 

    @Value("${kinesis.consumer.transaction.applicationName}") 
    private 
    String transactionApplicationName; 


    public String getTransactionStreamName() { 
     return transactionStreamName; 
    } 

    public void setTransactionStreamName(String transactionStreamName) 
    { 
     this.transactionStreamName = transactionStreamName; 
    } 

    public String getTransactionApplicationName() 
    { 
     return transactionApplicationName; 
    } 

    public void setTransactionApplicationName(String transactionApplicationName) 
    { 
     this.transactionApplicationName = transactionApplicationName; 
    } 

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

и, наконец, главный класс

public class TransactionProcessor { 

    @Autowired 
    private static Config config; 

    public static void main (String args[]) { 
     System.out.println(config.getTransactionApplicationName()+" " + config.getTransactionStreamName()); 
    } 
} 

нижеследующая структура проекта

structure

+1

Вы можете поделиться своей подробной структурой проекта? Я считаю, что это происходит потому, что application.properties может не быть на пути к классам – koder23

+0

Является ли это приложением Spring Boot или вы не используете Spring Boot? Файл 'application.properties' - это то, что используется Spring Boot, но если вы не используете Spring Boot, это не будет автоматически загружено. Вам нужно будет сделать то, что @ koder23 показывает ниже, чтобы Spring подобрал его. – Jesper

ответ

0

Помещенные application.properties в src/main/resources

+0

Фактически я поместил его в разных местах, таких как исходная папка, папка ресурсов и папка с конфигурацией – emrahozkan

1

Обратите внимание, что по умолчанию указанные ниже папки доступны на пути к классам:

/src/main/java/ 
/src/main/resources/ 
/src/main/test/ 

Теперь, как я сделал это, что мой/SRC/main/resources/имеет мой файл application.properties, а my/src/main/java - пакет com.mypackage.config, у которого есть файл Config.java. Способ, на который я ссылался, приведен ниже:

@PropertySource("classpath:application.properties") 

Это работает для меня.

+0

Я положил приложение.свойства во всех этих папках, кроме теста – emrahozkan

0

Я предполагаю, что Config.java находится в пакете. Скажем: «com.kinesis.app». Если конфигурационный файл находится в том же каталоге, то вы можете загрузить его с помощью:

@PropertySource("classpath:com/kinesis/app/application.properties") 

Однако другой пост является правильным. Большинство Java-инструментов будет использовать файлы в

SRC/основные/ресурсы

И скопируйте их в нужное место в вашей созданной банке. Как вы строите свое приложение?

+0

Здравствуйте, я добавил дерево структуры проекта к вопросу, попробовал ваше предложение, но все же не удалось – emrahozkan

0

Попробуйте загрузить среду, в которой работает текущее приложение. Моделируют два ключевых аспекта среды приложения: профили и свойства.

@Configuration 
@PropertySource({ "classpath:application.properties" }) 
public class PersistenceJPAConfig { 

@Autowired 
private Environment env; 

public void properties() { 
    Preconditions.checkNotNull(env 
      .getProperty("kinesis.consumer.transaction.streamName"))); 
    Preconditions.checkNotNull(env 
      .getProperty("kinesis.consumer.transaction.applicationName"))); 

    } 
} 
+0

Я тоже это пробовал, не работал – emrahozkan

+0

Что-то ужасно неправильно с вашим проектом настроить! Я бы подумал о начале. –

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