【问题标题】:How to pass JVM arguments in SpringBOOT如何在 SpringBOOT 中传递 JVM 参数
【发布时间】:2016-02-11 15:16:45
【问题描述】:

我想在我们将启动 Spring Boot 应用程序的主 Spring Boot 类中传递 JVM 参数。

能否请您分享如何在 Spring Boot 应用程序中设置 JVM 参数?

我尝试了以下选项,但没有运气

System.setProperty("http.proxyHost", "X.X.X.X");
System.setProperty("http.proxyPort", "8080");

或者你可以将它用于春季启动

bootRun {
    systemProperties "property1": "value1", "property2": "value2"
}

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    @SpringBootApplication
    public class DemoApplication {
    
        @Autowired
        MyFantasticClass myFantasticClass;
        
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
        
        @Bean
        CommandLineRunner commandLineRunner() {
            return args -> {
                System.out.println(myFantasticClass.getMyFantasticProperty());
            };
        }
    }
    
    @Component
    class MyFantasticClass{
        @Value("${myFantasticProperty}")
        String myFantasticProperty;
        
        String getMyFantasticProperty() {
            return myFantasticProperty;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以在app.conf 文件中添加的JVM 参数:

      export JAVA_OPTS='-Dyour_param=1234'
      

      来源:SPRING DOCS

      【讨论】:

        【解决方案3】:

        你可以像这样运行你的应用程序:

        $ java -jar app.jar --someProperty=123
        

        在应用程序调用中:

        import org.springframework.core.env.Environment;
        @Autowired
        private Environment env;
        
        String someProperty= env.getProperty("someProperty");
        

        【讨论】:

        • 从安全角度来看,这是否安全?
        【解决方案4】:

        您可以像这样运行您的应用程序:

        $ java -server -Dmyproperty=blabla -jar myapp.jar
        

        您可以在代码中访问 myproperty 的值。

        【讨论】:

        • -D 是什么意思?
        • 备注:-jar myapp.jar后面的选项不考虑。
        【解决方案5】:

        您必须使用 @Value 注释。例如

        @Value("#{systemProperties.test}")
        

        您可以直接在bean属性中使用它,我有一个在方法的参数中使用的示例。

        @SpringBootApplication
        public class ReviewsMicroserviceApplication {
        
            public static void main(String[] args) {
                ApplicationContext ctx =  SpringApplication.run(ReviewsMicroserviceApplication.class, args);
                System.out.println(ctx.getBean("value"));
            }
        
            @Bean
            public String value(@Value("#{systemProperties.test}")String value){
                return value;
            }
        }
        

        为了执行程序,您需要将 test 属性添加到 JVM 属性

         -Dtest="hallo reos"
        

        【讨论】:

          【解决方案6】:

          Spring Boot 有一个非常复杂的环境变量和配置属性管理。你可以做一些简单的事情来通过命令行传递值为“bar”的foo。

          java -jar app.jar --foo="bar"
          

          如果您还没有,下面的链接包含了在 Spring Boot 应用程序中外部化配置所需的一切:

          http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

          更新

          如果您正在运行 Spring Boot 应用程序,则应始终使用以下模式运行它:

          $ java -jar <jar-name> [--key1="value1"]... [--keyN="valueN"]
          

          并且不使用此处其他一些 cmets 中建议的命令行。

          【讨论】:

            【解决方案7】:

            您可以在启动应用程序时使用 -D 开关设置系统属性

            java -DsomeProperty=123 your.package.name.YourMainClassName
            

            稍后在您的代码中,您只需调用即可获得属性值

            System.getPropetry("someProperty")
            

            【讨论】:

              【解决方案8】:

              使用 -DargumentName 添加 JVM 参数,即

              -DargumentName="value1"
              

              然后在您的 spring 应用程序中,您可以通过执行以下操作来检索值:

              @Value("${argumentName}")
              private String myVariable
              

              希望这会有所帮助!

              【讨论】:

              • 如何在eclipse中添加?
              猜你喜欢
              • 2018-09-05
              • 1970-01-01
              • 1970-01-01
              • 2017-01-22
              • 2021-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-02
              相关资源
              最近更新 更多