有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jar外部的java Spring启动外部属性

我正在创建一个Spring启动应用程序,我遇到了这个问题
我的application.properties在resource文件夹中,但我还需要外部资源。属性文件位于jar之外,用于配置如下属性:
名称,
密码,
等等
我想要外用的。属性文件位于jar外部和resources文件夹内部,用于在开发时进行测试
我尝试创建如下配置文件:

@Configuration
 @PropertySource("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES)
 @PropertySource(value = "file:./" + 
 SpringConfiguration.EXTERNALIZED_PROPERTIES, ignoreResourceNotFound = true)
 public class SpringConfiguration {
       static final String EXTERNALIZED_PROPERTIES = "external.properties";
 }

但它仍然从资源文件夹中读取属性。我怎样才能让它从罐子外面读出来


共 (5) 个答案

  1. # 1 楼答案

    如果您希望开发和生产使用不同的道具,请使用application-dev.properties和application-prod.properties,并在启动时设置适当的spring配置文件。如果需要重写jar中的任何属性,只需将-Dmyproperty=myvalue添加到startup命令

  2. # 2 楼答案

    解决方案是删除外部数据。属性和配置文件。而不是使用它,而是将所有属性应用到应用程序中。财产。并提交申请。属性添加到jar文件夹中。Spring会自动将这个属性文件的优先级设置为高于jar中的属性文件

  3. # 3 楼答案

    尝试将绝对系统路径指定为file:属性的值

    或者,我建议先将该绝对路径设置为一个ENV变量,然后在file:中使用该变量:

    @PropertySource("file:${EXTERNAL_RESOURCE_DIR}/application.properties") 
    

    这样,当目录更改时,您就不需要更改代码

  4. # 4 楼答案

    马西耶·科瓦尔斯基的回答与此类似

    @PropertySources({
    @PropertySource(value = {"classpath:application.properties"}, ignoreResourceNotFound = true),
    @PropertySource(value = {"file:${external.config.location}/application.properties"}, ignoreResourceNotFound = true)
    

    })

    假设在文件夹“/home/me/configs”中有“application.properties”文件

    使用自定义文件夹运行应用程序:

    java -jar app.jar --external.config.location="/home/me/configs"
    

    或者

    java -jar app.jar --external.config.location="C:\\users\\your_user\\configs"
    

    此外,还可以将其导出为环境变量(unix)

    export JAVA_OPTS='-Dexternal_config_location=/home/me/configs'
    
  5. # 5 楼答案

    如果需要添加外部属性,可以仅在application.properties中指定

    例如: myapplication.username='john'

    通过Spring引导代码,您可以访问它,如下所示:

     @Autowired  
     private Environment env;
    
    //To access it
     String username = env.getProperty("myapplication.username");  
    

    或者

    @Value("$myapplication.username")

    我不认为有任何必要有外部文件,如果你的要求是你提到的问题