您的位置:

使用Spring Boot读取Jar包外的配置文件

一、指定外部配置文件

在Spring Boot应用程序中,可以通过配置文件指定外部配置文件的位置。具体配置如下:

java -jar myproject.jar --spring.config.location=file:/path/to/myconfig.properties

这样使用指定的路径加载外部配置文件,但会覆盖应用程序打包的默认配置文件。

另一种方法是在应用程序配置文件中指定外部文件路径,如下所示:

spring.config.location=file:/path/to/myconfig.properties

这样应用程序将首先尝试加载该路径下的文件,如果找不到,则加载默认配置文件。

二、加载外部资源文件

除加载配置文件外,Spring Boot也可以加载外部的资源文件,如HTML、CSS和JavaScript等。具体方式如下:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/myresources/**")
                .addResourceLocations("file:/path/to/myresources/");
    }
}

该示例代码中,实现了WebMvcConfigurer接口,并通过addResourceHandlers方法配置了资源文件的路径,对于我们想要提供外部访问的资源文件,可以通过“/myresources/**”路径进行访问,并且实际资源文件存储在“/path/to/myresources/”目录下。

三、加载外部模板文件

类似于加载资源文件,Spring Boot也可以加载外部模板文件,如JSP、Velocity和Thymeleaf等。具体方式如下:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mytemplates/**")
                .addResourceLocations("file:/path/to/mytemplates/");
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Bean
    public ITemplateResolver templateResolver() {
        FileTemplateResolver resolver = new FileTemplateResolver();
        resolver.setPrefix("file:/path/to/mytemplates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        return resolver;
    }
}

该示例代码中使用了Thymeleaf模板引擎,首先通过addResourceHandlers方法配置了模板文件的路径,然后定义了一个TemplateResolver对象的Bean,并将实际模板文件存储路径通过前缀“file:/path/to/mytemplates/”进行配置,同时指定了模板文件的后缀和模式。

四、使用命令行参数加载配置文件

除了指定外部配置文件路径,Spring Boot还支持通过命令行参数来加载外部配置文件。可以通过如下的命令来启动应用程序:

java -jar myproject.jar --spring.config.name=myconfig --spring.config.location=file:/path/to/

上述命令中,应用程序将会加载名为“myconfig”的外部配置文件,同时也指定了该文件所在的路径。如果文件名和文件路径都不指定,则会加载默认的“application”文件。

五、使用Bean加载配置文件

最后一种加载外部配置文件的方式是使用@Bean注解,来创建一个配置文件加载器。具体实现如下:

@Configuration
@PropertySource("classpath:/path/to/myconfig.properties")
public class MyConfig {
    @Value("${my.key}")
    private String myKey;

    @Bean
    public MyBean myBean() {
        return new MyBean(myKey);
    }
}

class MyBean {
    private final String myKey;

    MyBean(String myKey) {
        this.myKey = myKey;
    }
}

上述代码中,首先通过@PropertySource注解加载外部配置文件,然后使用@Value注解将配置文件中的属性注入到一个Java对象中。最后,通过@Bean注解创建一个Bean,并将Java对象作为构造函数参数传递到该对象中。