由“[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'so”引起的问题

本文记录了解决服务器配置错误的过程,尝试多种方法后采用Jetty替代Tomcat成功启动服务。介绍了从排查错误到最终解决问题的学习经历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己在配置服务器的时候,出错了

自己弄个了很久都总是报错。找不出原因。

 

于是,各种排错。

方式1:

找对应报错的原因,找到对应的类,找到依赖的包。最后得出结果,应该不是这个问题

方式2:

jdk版本和64位? 于是替换jdk版到32位,替换对应的tomcat的到32位,替换对应的eclipse到32位。(ide都分版本,为什么不弄个兼容的。。。)

最后,还是无法解决。

方式3:

找别人的解决方案。看网上有人说是Tomcat服务器的server.xml对应配置的最后一个Context的source属性不支持造成的

也就是<Context docBase="console" path="/ROOT" reloadable="true" source="org.eclipse.jst.jee.server:console"/></Host>

这句话没有识别,需要在 Server对应的Server Options的 Publish module contexts to separate XML file前面,打勾。

这样做了,虽然解决了问题,但是对应的服务没有运行。(可能别人解决了问题,我这个问题不一样)

方式4:

对比差别。 找同事要了项目,用beyond compare对比下,发现没有什么区别。

再对比 对应的runtime环境 和 launch设置。

发现设置对应的vm参数 很多。(其实,服务启动,vm对应的操作还是很复杂的。)

其中, 有几个数据是需要到对应的workspace的配置中去读取的。大体在  workspace的 \.metadata\.plugins\org.eclipse.wst.server.core 下

可以发现很多servers.xml,publish.xml等存储服务的配置参数的文件,还有tmp0,tmp1....等一些文件夹

推断tmp0,tmp1等是对应具体服务器配置等

最后,还是没有能解决。

 

自己只有给leader汇报, leader对于这个问题。

 

自己在查找问题的时候,在 http://zhidao.baidu.com/link?url=IHZ9D67K8rNYHH4p2CaUJdcFw40tQ_omKqRaA69NYdD9QjQJqLvd4PXYhS7wDFnZR-BcP6wJZtfCJde_-u8Fpa

中发现,有个回答很特别,很好,说:

【最新版的Eclipse和Tomcat最新版不兼容,暂时还没有解决办法,换个其他类型的服务器就可以了,如JBOSS、Glassfish等】

 

leader在maven的pom文件中plugin了jetty

 

<plugin>
	<groupId>org.mortbay.jetty</groupId>
	<artifactId>maven-jetty-plugin</artifactId>
	<version>6.1.26</version>
	<configuration>
		<contextPath>/</contextPath>
		<connectors>
			<connector implementation="org.mortbay.jetty.bio.SocketConnector">
				<port>8480</port>
			</connector>
		</connectors>
	</configuration>
</plugin>


对应目录下, mvn clean compile 编译, mvn jettyrun 自动下载完依赖包后,自动启动了

对应8480端口访问网页,浏览项目完毕。

 

 

有的时候,自己解决问题虽然没有成功,

但是,解决问题的过程中,也可以学到不少东西, 只要你想为什么。

 

<think>我们正在处理一个关于Tomcat启动警告的问题。用户遇到了一个警告信息:"WARNING [main] org.apache.tomcat.util.digester.SetPropertiesRule.begin Setting property 'prestartminSpareThreads' not found"。我们需要解释这个警告的含义,并提供解决方法。 首先,我们需要了解这个警告的背景。Tomcat使用Digester规则来解析server.xml配置文件,并将XML元素映射到Java对象的属性。SetPropertiesRule是其中一条规则,它尝试将XML元素的属性设置到对应的Java对象上。当在XML元素中指定了一个属性,但该属性在对应的Java对象中不存在时,就会触发这个警告。 在这个例子中,属性名为'prestartminSpareThreads'。这个属性可能是用户配置在某个Connector的线程池设置中的。但是,Tomcat的线程池实现(通常是org.apache.tomcat.util.threads.ThreadPoolExecutor)并没有这个属性。实际上,Tomcat的Connector线程池配置中,有一个属性叫做“prestartminSpareThreads”,但请注意,这个属性是在Tomcat 7.0.32及以后版本中引入的。如果用户使用的Tomcat版本较低,那么这个属性就不存在。 另外,还有一种可能是用户将属性名拼写错误。例如,正确的属性名是“prestartMinSpareThreads”(注意大小写),而用户可能写成了“prestartminSpareThreads”(第二个单词的首字母小写)。在JavaBean规范中,属性名是大小写敏感的。 因此,我们有两个可能的原因: 1. Tomcat版本过低,不支持该属性。 2. 属性名拼写错误。 解决方法: 1. 检查Tomcat版本,如果版本过低(低于7.0.32),则升级Tomcat到支持该属性的版本(7.0.32及以上)。或者,如果不需要这个属性,可以删除它。 2. 检查属性名的拼写,确保是“prestartMinSpareThreads”(注意大小写)。 用户可以在Connector配置中检查这个属性。例如,在server.xml中,Connector配置可能如下: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" prestartminSpareThreads="true" /> ``` 如果属性名拼写错误,应更正为: ```xml <Connector ... prestartMinSpareThreads="true" /> ``` 另外,从Tomcat 8.5开始,默认的Connector实现是NIO,线程池配置属性也有所调整,但“prestartMinSpareThreads”属性仍然存在。 总结步骤: - 确认server.xml中该属性的拼写是否正确。 - 确认Tomcat版本是否支持该属性。 如果用户无法升级Tomcat,且不需要这个功能,可以删除该属性以避免警告。 注意:在Tomcat 8.5和9中,这个属性是存在的,所以如果用户使用的是较新版本但仍然出现警告,那一定是拼写问题。 引用说明:Tomcat官方文档中关于Connector配置的属性列表可以参考[^1]。</think>### Tomcat "Setting property 'prestartminSpareThreads' not found" 警告分析 #### 问题原因 该警告发生在 Tomcat 解析 `server.xml` 配置文件时,具体原因是: 1. **无效属性名**:在 `<Connector>` 或 `<Executor>` 配置中使用了未识别的属性 `prestartminSpareThreads` 2. **大小写敏感问题**:实际属性名应为 `prestartMinSpareThreads`(注意大小写) 3. **版本兼容性**:该属性在 Tomcat 7.0.32+ 和 Tomcat 8.5+ 中引入,旧版本不支持[^1] 4. **XML解析规则**:`SetPropertiesRule` 尝试将 XML 属性映射到 Java Bean 属性时失败 #### 解决方法 ##### 1. 修正属性名(推荐方案) 修改 `server.xml` 中的属性名为正确大小写格式: ```xml <!-- 错误配置 --> <Connector prestartminSpareThreads="true" ... /> <!-- 正确配置 --> <Connector prestartMinSpareThreads="true" ... /> ``` *注:关键是将 `min` 改为大写 `Min`* ##### 2. 检查 Tomcat 版本 执行命令查看版本: ```bash $ catalina.sh version ``` - Tomcat ≥7.0.32 或 ≥8.5:支持此属性 - 旧版本:需升级或移除该属性 ##### 3. 验证线程池配置 标准线程池配置示例(Tomcat 8.5+): ```xml <Executor name="tomcatThreadPool" prestartMinSpareThreads="true" minSpareThreads="25" maxThreads="200" /> <Connector executor="tomcatThreadPool" port="8080" ... /> ``` #### 属性作用说明 `prestartMinSpareThreads` 控制线程池初始化行为: - `true`:启动时立即创建 `minSpareThreads` 指定的最小线程数 - `false`:延迟创建线程(默认值) 启用此属性可提高初始请求的响应速度,但会增加启动开销[^2]。 #### 其他注意事项 1. 检查配置文件位置:`$CATALINA_BASE/conf/server.xml` 2. 重启 Tomcat 生效:`./shutdown.sh && ./startup.sh` 3. 查看完整日志:`tail -f $CATALINA_BASE/logs/catalina.out`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值