Можно ли настроить файл свойств для определенного модуля / слоя в JAVA? - PullRequest
0 голосов
/ 21 ноября 2019

У меня есть приложение Java Spring MVC, имеющее 3 слоя, что является очень стандартной архитектурой

Контроллер

Сервис

DAO

Каждый из этих слоев поддерживается с использованием отдельных контекстных файлов Spring. Каждый слой поддерживает свой собственный файл свойств.

Controller => controller-context.xml => controller.properties
Service => service-context.xml => service.properties
Dao => dao-context.xml => dao.properties

Я настроил слой DAO, как показано ниже.

dao.properties

db.url=admin@localhost:1028/test
db.user=admin
db.password=admin

dao-context.xml

<bean id="propertyConfigurerDB" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
       <list>
           <value>classpath:dao.properties</value>
       </list>
   </property>
   <property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

Когда я загружаю все эти файлы контекста и файлы свойств, каждое свойство доступно или может быть внедрено в любой слой, будь то Контроллер или Служба или DAO , что означает, что свойства являются глобальными.

Есть ли какая-либо конфигурация, которая мне нужна, чтобы dao.properties былоиспользуется только DAO layer?

1 Ответ

1 голос
/ 21 ноября 2019

Вы можете добавить аннотацию в свой класс DAO @PropertySource («файл: / {выбранное место} /dao.properties»), где вы использовали аннотацию @Value. Чтобы получить значения в коде, у вас может быть отдельный загрузчик каждого из свойств, которые реализуют общий интерфейс (MyApplicationPropertyLoader здесь). Теперь вы можете выбрать, какая реализация этого интерфейса будет использоваться для загрузки свойств в dao-config.properties.

        public class DaoPropertiesLoader extends MyApplicationPropertyLoader{

          private static Properties appProperties = null;

          public static Properties getProperties() {
                if (appProperties == null || appProperties.isEmpty()) {.
                    appProperties =propertySourcesPlaceholderConfigurer();
                } 
                return appProperties;
            }

            public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
                PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer();
                properties.setLocation(new FileSystemResource("{selected location}/dao.properties"));
                properties.setIgnoreResourceNotFound(false);
                return properties;
            }

@Override
    public String getExternalProperty(String property) {
            String propertyVal = getProperties().getProperty(property); 
            return propertyVal;
        }

        }

Но выгода здесь заключается в том, что теперь вам придется везде использовать MyApplicationPropertyLoader.getExternalProperty () для получениязначение в DaoLayer.

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