Spring Boot - 不覆盖服务器端口属性
Posted
技术标签:
【中文标题】Spring Boot - 不覆盖服务器端口属性【英文标题】:Spring Boot - not overriding server port property 【发布时间】:2016-04-24 18:47:09 【问题描述】:我有一个 Spring Boot 项目,其中服务器端口始终设置为 8080,无论 server.port 属性如何。除了 server.port 之外的所有属性都被正确覆盖。属性配置bean:
@Bean
public PropertySourcesPlaceholderConfigurer properties()
final PropertySourcesPlaceholderConfigurer poc = new PropertySourcesPlaceholderConfigurer();
poc.setIgnoreResourceNotFound(true);
poc.setIgnoreUnresolvablePlaceholders(true);
final List<Resource> list = new ArrayList<Resource>();
// default (dev) properties
list.add(new ClassPathResource(PROPERTIES_FILE));
// override with -Dproperties.location=C:/path/to/properties/ where overriding application.properties resides
list.add(new FileSystemResource(System.getProperty(EXTERNAL_ARGUMENT_NAME)+PROPERTIES_FILE));
poc.setLocations(list.toArray(new Resource[]));
return poc;
这意味着我的类路径 application.properties 是默认的(开发属性),它被 jvm 参数 -Dproperties.location=C:\application\config 覆盖。
server.port 属性未在我的类路径属性文件中定义,因此在开发环境中默认为 8080。这很好,但为了测试我想指定端口。我的外部属性文件包含此属性:
server.port=10070
日志:
[2016-01-19 11:14:10:010 CET] INFO [restartedMain] support.PropertySourcesPlaceholderConfigurer: Loading properties file from class path resource [application.properties]
[2016-01-19 11:14:10:010 CET] INFO [restartedMain] support.PropertySourcesPlaceholderConfigurer: Loading properties file from file [C:\var\opt\application\config\application.properties]
[2016-01-19 11:14:11:011 CET] INFO [restartedMain] support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker: Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$418ca8e8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
[2016-01-19 11:14:11:011 CET] INFO [restartedMain] tomcat.TomcatEmbeddedServletContainer: Tomcat initialized with port(s): 8080 (http)
[2016-01-19 11:14:11:011 CET] INFO [restartedMain] core.StandardService: Starting service Tomcat
【问题讨论】:
你是从 Eclipse 运行你的项目吗?请注意,eclipse 运行配置从类路径中排除了 applictation.properties 文件(和其他一些文件)。它们位于默认 Spring Boot 项目的资源文件夹中。请参阅 project->properties->Java Build Path Source 如果这也是从命令行发生的,那么只需在调试模式下运行应用程序(--debug),您将看到实际拾取了哪些属性文件 你为什么要使用你自己的配置?首先它应该是静态的。但是为什么不简单地将所有内容添加到application.properties
或使用默认的弹簧启动机制呢? (这已经支持你所做的)。与框架合作而不是反对框架。
@M.Deinum 我删除了我自制的解决方案,并使用了更简单的引导默认值(/config 子文件夹中的 application.properties)。起初它不起作用,这就是为什么我制作了自己的解决方案,但现在我让它起作用了。谢谢。
【参考方案1】:
如果您在项目中使用弹簧执行器,默认情况下它指向 8080,如果你想改变它,那么在application.properties中提到 management.port = 9001
【讨论】:
您也可以通过编程方式自定义端口。请点击以下链接docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/… 谢谢,我忘了我在我的项目中添加了执行器,因为我还没有玩过它。添加 management.port 工作。【参考方案2】:您也可以尝试在运行时使用 -Dserver.port= 或 --server.port= 覆盖端口。稍后在您作为 java -jar 运行时使用。希望这会有所帮助。
【讨论】:
以上是关于Spring Boot - 不覆盖服务器端口属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中设置 ActiveMQ 端口?
指定端口时,Spring Boot Actuator 端点的单元测试不起作用