我正在處理一個(gè)需要在運(yùn)行時(shí)解析數(shù)據(jù)庫(kù)密碼的項(xiàng)目。我通過(guò)DataSourceFactory在 Tomcat 配置中指定 a 來(lái)有效地在本地執(zhí)行此操作。此過(guò)程可防止任何憑據(jù)存儲(chǔ)在純文本配置文件中,并為我們提供了在運(yùn)行時(shí)解析密碼的自定義控件。我在本地取得了巨大的成功,但是當(dāng)我將我的解決方案移動(dòng)到 AWS 上的真實(shí)/非嵌入式 Tomcat 實(shí)例時(shí),我看到了這個(gè)錯(cuò)誤:無(wú)法在命名的工廠類“org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory”上調(diào)用靜態(tài) newInstance 方法。首先,圍繞此錯(cuò)誤消息有一些可疑的細(xì)節(jié)。第一(如下所示),盡管其他憑據(jù)有效(例如用戶名、密碼等),但我的工廠類在 tomcat 配置文件中被忽略。我的代碼DataSourceFactory需要引用一個(gè)類來(lái)解析一個(gè)值。這是我對(duì) tomcat 的 xml 配置:<?xml version='1.0' encoding='UTF-8'?><Context useHttpOnly="false"> <Resource auth="Container" name="mail/Session" type="javax.mail.Session"/> <Resource name="jdbc/jndi" auth="Container" scope="Shareable" type="javax.sql.DataSource" useLocalSessionState="true" cacheServerConfiguration="true" useServerPrepStmts="true" cachePrepStmts="true" cacheCallableStmts="true" elideSetAutoCommits="true" alwaysSendSetIsolation="false" enableQueryTimeouts="false" prepStmtCacheSize="250" prepStmtCacheSqlLimit="2048" maxActive="100" maxIdle="20" maxWait="10000" removeAbandoned="true" driverClassName="com.mysql.jdbc.Driver" url="${myURL}" username="${myUsername}" password="${myPasswordToResolve}" factory="my.class.CustomDatabaseConfigurationFactory" testOnBorrow="true" testWhileIdle="true" timeBetweenEvictionRunsMillis="20000" poolPreparedStatements="true" maxOpenPreparedStatements="50" validationQuery="select 1" validationInterval="60000" defaultTransactionIsolation="READ_COMMITTED" />我不會(huì)添加我的代碼,my.class.CustomDatabaseConfigurationFactory因?yàn)槲抑浪诒镜毓ぷ?。出于某種原因,當(dāng)我使用遠(yuǎn)程配置和設(shè)置啟動(dòng)它時(shí),Tomcat 完全忽略了我為 JNDI 資源設(shè)置的自定義工廠。有什么我必須添加的東西來(lái)強(qiáng)制 Tomcat 尋找我的自定義工廠而不是忽略它嗎?我在本地的嵌入式 tomcat 實(shí)例上有幾乎相同的配置。最重要的是,我在日志中沒(méi)有看到任何與錯(cuò)誤配置文件相關(guān)的線索。
1 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
實(shí)際上,當(dāng)自定義數(shù)據(jù)工廠正在解析正確的密碼時(shí),絕不會(huì)發(fā)生此問(wèn)題。
對(duì)于遇到此問(wèn)題的其他人,請(qǐng)注意以下幾點(diǎn):
最重要的是,我在日志中沒(méi)有看到任何與錯(cuò)誤配置文件相關(guān)的線索。
這是一個(gè)致命的贈(zèng)品,沒(méi)有加載某些東西或沒(méi)有正確設(shè)置記錄器。在我意識(shí)到 log4j 沒(méi)有正確配置后,我能夠看到我的工廠實(shí)際上正在加載。后來(lái),在看到結(jié)果后,我能夠看到為數(shù)據(jù)庫(kù)設(shè)置的密碼不正確。
雖然日志錯(cuò)誤級(jí)別太高,沒(méi)有足夠詳細(xì)的信息,但這個(gè)問(wèn)題可以通過(guò)基本的調(diào)試方法修復(fù),并且可以通過(guò)注意日志來(lái)避免。
添加回答
舉報(bào)
0/150
提交
取消