javax.naming.NamingException:リソースインスタンスを作成できません



Javax Naming Namingexception



今日のオンラインTomcatはSpringBootプログラムを実行してこの例外を報告しましたが、奇妙なことに、私のローカルアイデアのデバッグにはこの問題はなく、正常に実行できます。

catalina.outを見て、いくつかの不可解なエラーを報告しましたが、クラスが見つかりませんでした。しかし、私はこれまでこれらのクラスに触れたことがありません。



次に、次を見てくださいlocalhost.2018-11-27.log、javax.naming.NamingExceptionが見つかりました:リソースインスタンスを作成できず、my InitListenerをポイントしていますコードの一部は次のとおりです

@WebListener public class InitListener implements ServletContextListener { @Resource private Environment env @Override public void contextInitialized(ServletContextEvent servletContextEvent) { LOG.info('InitListener initialized') String profile = env.getProperty(CommonConstants.PROFILE) AlarmUtil.init(profile) } }

このために推測されます@WebListener私は1つに参加しました@Resourceアンロードされた使用を引き起こしましたEnvrionmentオブジェクトが引き起こされました。取り外した後、エラーが発生しないことを確認してください。しかし、ここではビジネスが最初に構成をロードする必要があるため、この場所では次のように土壌法を使用しました。



Environment env = (Environment) WebApplicationContextUtils.getWebApplicationContext(servletContextEvent.getServletContext()).getBean('environment')

つまり、SpringのWebApplicationContextは初期化され、servletContextのプロパティとして配置されているため、直接使用して見つけることができます。environmentこのBeanのインスタンスが使用されます。

そして、それがうまくいかない前に、@WebListener with @Resource初期化シーケンスが原因であり、私は交換しています@AutoWiredまたはそうではありません。