Доступ к файлу к файлам файла в папке conf Tomcat - PullRequest
1 голос
/ 14 июля 2011

Я хотел бы знать, возможно ли получить доступ к файлу, помещенному в папку conf tomcat.Обычно я помещаю конфигурацию для нескольких веб-приложений вне войн в этот файл.

Я хочу использовать classpath, чтобы быть независимым от файловой системы.

Я использовал папку lib впрошлое.Это прекрасно работает.Но нет смысла использовать папку lib для установки файла conf.

Может ли кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 14 июля 2011

Я видел много плохих способов, которыми люди конфигурируют в веб-приложениях, что либо делает их неконфигурированными (вы должны выполнять повторное развертывание / выпуск при изменении конфигурации), либо у вас очень мало гибкости.

Как я подхожу к этой проблеме, это использую Spring для заполнителя свойства , но часто вам нужно загружать Spring или что-то еще из стека MVC перед его загрузкой со свойством, которое говорит, куда загружать config. Я использую слушателя для этого:

package com.evocatus.util;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class SimpleContextListenerConfig /*extend ResourceBundle */ implements ServletContextListener{

    private ServletContext servletContext;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        servletContext = sce.getServletContext();
        servletContext.setAttribute(getClass().getCanonicalName(), this);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }

    public static String getProperty(ServletContext sc, String propName, String defaultValue) {
        SimpleContextListenerConfig config = getConfig(sc);
        return config.getProperty(propName, defaultValue);
    }

    public static SimpleContextListenerConfig getConfig(ServletContext sc) {
        SimpleContextListenerConfig config = 
            (SimpleContextListenerConfig) sc.getAttribute(SimpleContextListenerConfig.class.getCanonicalName());
        return config;
    }

    public String getProperty(String propName, String defaultValue)
    {
        /*
         * TODO cache properties
         */
        String property = null; 

        if (property == null)
            property = servletContext.getInitParameter(propName);
        if (property == null)
            System.getProperty(propName, null);
        //TODO Get From resource bundle
        if (property == null)
            property = defaultValue;

        return property;
    }
}

https://gist.github.com/1083089

Свойства будут извлекаться сначала из контекста сервлета, а затем из системных свойств, что позволяет вам переопределять определенные веб-приложения. Вы можете изменить конфигурацию веб-приложения Certian, либо изменив файл web.xml (не рекомендуется), либо , создав файл context.xml

.

Вы можете использовать статические методы для получения конфигурации:

public static SimpleContextListenerConfig getConfig(ServletContext sc);
...