init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'

本文记录了一次因未卸载旧项目导致Tomcat内存不足的问题,并分享了解决方案。作者通过重新配置开发环境发现问题所在,最终通过卸载不必要的项目解决了问题。

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

 四月 12, 2014 1:54:12 上午 org.apache.catalina.core.ApplicationContext log
信息: HTMLManager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'
四月 12, 2014 1:54:12 上午 org.apache.catalina.core.ApplicationContext log
信息: HTMLManager: init: Global resources are available
四月 12, 2014 1:54:12 上午 org.apache.catalina.core.ApplicationContext log
信息: HTMLManager: list: Listing contexts for virtual host 'localhost'

这是tomcat的log信息
 
 
 
项目重新发布到tomcat后就这样了,之后就各种纠结,
 
崩溃,可是问题必须要给解决。
 
一直倒弄,到最后竟然将开发环境从头开始配置了一遍,
 
从jdk  tomcat myeclipse 
 
之后才反应过来是自己在tomcat中每次发布的项目都没有卸载下来,
 
导致tomcat内存不足。
 
解决办法::::
将不需要的项目卸载下来,一切OK!!!!!!!!!!!!
 

转载于:https://www.cnblogs.com/kuangyuping/p/3662840.html

<think>我们正在解决IgniteSQL执行中的两个问题:Schema未找到和字段别名冲突。根据之前的上下文,我们已经在尝试添加列时遇到了Schema未找到的错误,并且现在还可能存在别名冲突问题(SSID,localField,receivedField等)。步骤:1.解决Schema未找到的问题:-确认正确的Schema名称。在Ignite中,默认的Schema名称是"PUBLIC",但用户可能已经创建了自定义Schema(如引用[2]所示)。-通过IgniteConfiguration设置SqlSchemas(引用[2])或者在SQL语句中显式指定Schema。2.字段别名冲突:当我们使用SELECT语句并且字段名与保留字冲突,或者多个表有相同字段名时,可能会发生别名冲突。可以使用AS关键字给字段起别名。具体方案:对于Schema问题:-在SQL语句中正确指定Schema。例如,如果我们的表在Schema"MY_SCHEMA"中,那么表名应该写为"MY_SCHEMA"."CLIENT_IMAGE"。-注意:Ignite中表名和Schema名是大小写敏感的。如果创建时使用了大写,那么查询时也需要大写(除非使用双引号包围并指定大小写)。对于别名冲突:-在查询中,为可能冲突的字段使用别名。例如:SELECTlocalFieldASlocal,receivedFieldASreceived...另外,根据引用[3]和[4],Ignite使用H2作为SQL引擎,H2默认将标识符转换为大写,除非使用双引号。因此,在DDL和DML中,如果需要保持大小写,应该使用双引号。因此,修改之前的ALTERTABLE语句:原语句:ALTERTABLEClientImageIgnitePO.CLIENT_IMAGEADDCOLUMNssidVARCHAR;问题:-ClientImageIgnitePO被当作Schema名,但是可能不存在,或者大小写不匹配。修正:假设我们确定Schema名为"PUBLIC"(默认)或者自定义的某个名字(例如"CLIENTIMAGEIGNITEPO",但通常是大写形式),我们可以:Option1:使用默认的PUBLICSchemaALTERTABLEPUBLIC.CLIENT_IMAGEADDCOLUMNssidVARCHAR;Option2:如果确实存在名为"CLIENTIMAGEIGNITEPO"的Schema,并且表在其中,则使用双引号确保大小写:ALTERTABLE"CLIENTIMAGEIGNITEPO"."CLIENT_IMAGE"ADDCOLUMNssidVARCHAR;但是,通常我们建议在创建表时确定Schema,并在查询时保持一致。另外,关于别名冲突的解决(在SELECT语句中):例如,我们有两个字段:localField和receivedField,我们想避免冲突,可以:SELECT"localField"ASlocal,"receivedField"ASreceivedFROM...如果字段名是大小写敏感的,用双引号。执行DDL的注意事项(引用[1]):-确保集群状态是ACTIVE(通过ALTERCLUSTERACTIVATE)。-使用IgniteCache的query方法执行SqlFieldsQuery,注意该操作应该在一个已经存在的缓存上进行。根据引用[4],Ignite的SQL引擎是H2,因此H2的规则适用。具体步骤:1.确定Schema名称:我们可以通过以下SQL查询现有的Schema:SELECTSCHEMA_NAMEFROMINFORMATION_SCHEMA.SCHEMATA;或者查询当前节点配置的SqlSchemas(引用[2])。2.修改ALTERTABLE语句,使用正确的Schema。3.对于别名冲突,在编写SELECT语句时使用别名。示例代码:假设我们已知Schema名为"PUBLIC",则:```javaStringalterSql="ALTERTABLEPUBLIC.CLIENT_IMAGEADDCOLUMNssidVARCHAR";igniteCache.query(newSqlFieldsQuery(alterSql)).getAll();```或者,如果我们想要保持表名和Schema名的大小写,使用双引号:```javaStringalterSql="ALTERTABLE\"CLIENTIMAGEIGNITEPO\".\"CLIENT_IMAGE\"ADDCOLUMNssidVARCHAR";```注意:表名和列名在H2中默认是大写的,所以如果我们创建表时使用了双引号指定了大小写,那么后续操作也必须使用双引号。关于字段别名冲突,我们以查询为例:原查询可能有冲突:SELECTlocalField,receivedFieldFROMPUBLIC.CLIENT_IMAGE;如果这两个字段在表中存在,但我们在Java中接收时可能因为忽略大小写而导致冲突(因为H2默认返回大写的列名,而Java中映射时可能会将列名转为大写),所以为了避免在结果集中出现相同的列名(尽管原始列名不同但转换为大写后相同),或者为了避免与保留字冲突,我们可以使用别名:SELECTlocalFieldASlocal,receivedFieldASreceivedFROMPUBLIC.CLIENT_IMAGE;这样,结果集中的列名就是"LOCAL"和"RECEIVED"(因为H2默认大写),在Java中我们可以通过别名来获取。在Java中获取结果:List<List<?>>result=igniteCache.query(newSqlFieldsQuery(sql)).getAll();for(List<?>row:result){//注意:列的顺序和别名对应ObjectlocalValue=row.get(0);ObjectreceivedValue=row.get(1);}如果我们使用字段名来获取,注意结果集是列名的顺序,而列名是别名(大写)。另一种方法是在SqlFieldsQuery中设置列名的大小写行为:SqlFieldsQueryquery=newSqlFieldsQuery(sql);query.setEnforceJoinOrder(true);//设置是否将列名转为小写//但是Ignite的SqlFieldsQuery没有直接设置列名大小写的方法,通常默认返回大写列名。因此,在Java代码中处理结果时,建议使用列索引(从0开始)来获取值,或者使用别名并知道别名的大写形式。总结:-Schema问题:确保使用正确的Schema名(大小写敏感,建议用双引号或统一大写)。-字段别名冲突:在SQL查询中使用AS关键字为字段设置别名。另外,如果出现字段名与SQL保留字冲突,则必须使用双引号将字段名括起来(H2要求),例如:SELECT"SELECT","FROM"FROM...但这种情况比较少,通常还是使用别名解决。最后,关于添加列的操作,我们还需要注意:-列名不能与已有列重复(不区分大小写)。-添加列操作需要集群中所有节点在线并且状态一致。如果问题依然存在,请检查集群状态,以及表是否存在于指定的Schema中。生成相关问题:1.如何查询Ignite中所有的Schema?2.如何在IgniteSQL中处理大小写敏感的表名和列名?3.在Ignite中执行DDL语句有哪些注意事项?4.如何避免IgniteSQL查询中的字段名冲突?按照要求,在回答中引用相关段落,例如:[^1]</think> ### 解决 Ignite SQL 的 Schema 未找到和别名冲突问题 #### 1. Schema 未找到问题解决(核心方案) **问题根源**:Ignite 默认使用大写 Schema 名称[^2][^4],而代码中的 `ClientImageIgnitePO` 不符合规范。 ```java // 修正后的 SQL(使用大写 SCHEMA 和双引号包裹) String sql = """ ALTER TABLE "PUBLIC"."CLIENT_IMAGE" ADD COLUMN SSID VARCHAR(64); """; // 明确指定长度[^4] // 激活集群(关键步骤!) igniteCache.query(new SqlFieldsQuery("ALTER CLUSTER ACTIVATE")).getAll(); // 执行 DDL List<?> list = igniteCache.query(new SqlFieldsQuery(sql)).getAll(); ``` **关键修改**: 1. 使用 Ignite 默认 Schema `PUBLIC`(所有字母大写) 2. 表名/列名用双引号包裹解决大小写敏感问题[^4] 3. 添加集群激活命令(避免 `Cache not found` 错误) 4. 显式声明字段长度(避免隐式转换问题) #### 2. 字段别名冲突解决(SSID/localField/receivedField) **问题根源**:查询结果字段名冲突时,Ignite 默认返回大写列名导致映射错误。 **解决方案**(二选一): ```sql /* 方案1:SQL中使用显式别名 */ SELECT SSID AS "ssid", LOC_FIELD AS "localField", RECV_FIELD AS "receivedField" FROM "PUBLIC"."CLIENT_IMAGE" ``` ```java /* 方案2:Java中强制小写列名 */ SqlFieldsQuery query = new SqlFieldsQuery(""" SELECT SSID, LOC_FIELD, RECV_FIELD FROM "PUBLIC"."CLIENT_IMAGE" """); query.setEnforceJoinOrder(true); // 优化执行计划 query.setLazy(true); // 避免超大结果集问题[^3] // 关键:设置小写列名标识 Field[] fields = FieldsQuery.class.getDeclaredFields(); Field sqlField = Stream.of(fields) .filter(f -> f.getName().equals("isQuery")) .findFirst().orElse(null); if (sqlField != null) { sqlField.setAccessible(true); sqlField.setBoolean(query, true); // 触发小写列名转换 } ``` #### 3. 验证与配置建议 ```java // 验证字段添加成功(元数据查询) String metaSql = """ SELECT COLUMN_NAME FROM SYS.TABLE_COLUMNS WHERE TABLE_NAME = 'CLIENT_IMAGE' AND COLUMN_NAME = 'SSID' """; List<List<?>> result = igniteCache.query( new SqlFieldsQuery(metaSql).setSchema("PUBLIC") ).getAll(); System.out.println("SSID列存在: " + !result.isEmpty()); ``` **JDBC 连接优化配置**: ```java // 最佳连接参数[^3] String JDBC_URL = "jdbc:ignite:thin://localhost:10800?" + "schema=PUBLIC" // 显式指定Schema + "&lazy=true" // 启用懒加载 + "&socketTimeout=30000"; // DDL超时设置 ``` #### 4. 根本原因说明 1. **Schema大小写敏感**:Ignite 底层使用 H2 引擎,默认强制标识符大写[^4],需用双引号包裹或全大写 2. **集群状态要求**:DDL 操作前需激活集群 (`ALTER CLUSTER ACTIVATE`)[^2] 3. **别名冲突机制**:Ignite 返回结果时自动转为大写列名,导致 `SSID` 和 `ssid` 被识别为相同字段 4. **缓存配置关联**:表必须关联已有缓存(`igniteCache` 需指向正确缓存实例) > 通过 JDBC 操作时,建议添加 `autocommit=true` 参数[^3],否则需显式执行 `COMMIT`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值