Skip to content

Spring 使用 FileSystemXmlApplicationContext 加载 jar 包外部配置文件

项目中原本使用 ClassPathXmlApplicationContext 加载 jar 包中的配置文件,开发中使用很方便。但正式发布后配置文件的修改很麻烦,每次发布都要直接打开 jar 包手动修改。

通过使用将 ClassPathXmlApplicationContext 修改为 FileSystemXmlApplicationContext 即可加载文件系统中的配置文件。

java
ctx = new FileSystemXmlApplicationContext("/applicationContext.xml");

参数中也可以使用绝对路径。

参考

1. Spring 中 ClassPathXmlApplicationContext 类的简单使用

java
public class HelloClient {
    protected static final Log log = LogFactory.getLog(HelloClient.class);

    public static void main(String[] args) {
        // Resource resource = new ClassPathResource("appcontext.xml");
        // BeanFactory factory = new XmlBeanFactory(resource);

        // 用 classpath 路径
        // ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:appcontext.xml");
        // ApplicationContext factory = new ClassPathXmlApplicationContext("appcontext.xml");

        // ClassPathXmlApplicationContext 使用了 file 前缀是可以使用绝对路径的
        // ApplicationContext factory = new ClassPathXmlApplicationContext("file:F:/workspace/example/src/appcontext.xml");

        // 用文件系统的路径,默认指项目的根路径
        // ApplicationContext factory = new FileSystemXmlApplicationContext("src/appcontext.xml");
        // ApplicationContext factory = new FileSystemXmlApplicationContext("webRoot/WEB-INF/appcontext.xml");

        // 使用了 classpath:前缀,这样,FileSystemXmlApplicationContext 也能够读取 classpath 下的相对路径
        // ApplicationContext factory = new FileSystemXmlApplicationContext("classpath:appcontext.xml");
        // ApplicationContext factory = new FileSystemXmlApplicationContext("file:F:/workspace/example/src/appcontext.xml");

        // 不加 file 前缀
        ApplicationContext factory = new FileSystemXmlApplicationContext("F:/workspace/example/src/appcontext.xml");
        IHelloWorld hw = (IHelloWorld)factory.getBean("helloworldbean");
        log.info(hw.getContent("luoshifei"));
    }
}