【发布时间】:2019-11-23 11:55:45
【问题描述】:
我正在将一个 j2EE 应用程序迁移到 spring-boot.. 我在这里面临很多挑战.. 需要你的小帮助,以下是我遵循的步骤
- 是否设置了 POM、JAR 和 WAR 打包
- 尝试将 Servlet 转换为 RestController
- 我已注册为的过滤器
@Configuration
public class FilterConfigService {
@Bean
public FilterRegistrationBean mdcFilter() {
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(new MDCFilter());
filterRegBean.addUrlPatterns("/v2/*");
filterRegBean.setOrder(1);
return filterRegBean;
}
@Bean
public FilterRegistrationBean apiOriginFilter() {
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(new ApiOriginFilter());
filterRegBean.addUrlPatterns("/v2/*");
filterRegBean.setOrder(2);
return filterRegBean;
}
}
- 有一个单例类,用于通过 servlet 的 Init() 实例化一些必要的东西,因为所有 bean 默认情况下在范围内都是单例的,所以我删除了这些单例类,并按照以下方式进行实例化(不知道这是否是好的做法)
@Configuration
public class PdfExtractServerConfig implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
PdfExtractServer pdfExtractServer;
private static Logger log = Logger.getLogger(PdfExtractServerConfig.class);
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
try {
pdfExtractServer.instance(); // this was called in init of servlet
System.out.println("instance created ..");
}
catch (Throwable e) {
log.error("Unable to start PdfExtractServer", e);
throw e;
}
//Start monitoring for system health
ResourceCheck.startMonitoring();
SplunkMgr.instance().addSplunkMessage("BackPressure", LogLevel.INFO);
}
}
单吨类如下..
以前是这样的
public static PdfExtractServer instance() {
if (instance == null) {
synchronized (startupLock) {
if (instance == null) {
instance = new PdfExtractServer();
instance.start("PES");
}
}
}
return instance;
}
现在我把它做成了
public static PdfExtractServer instance() {
// instance = new PdfExtractServer();
instance.start("PES");
return instance;
}
这是我的测试控制器
@RestController
//@RequestMapping("/")
public class Test {
@RequestMapping("/test" )
public String test(){
return "Tested OK";
}
}
我不明白我在哪里做错了......当我尝试运行此渲染时
无法在以下位置启动 PdfExtractServer java.lang.NullPointerException com.it.pes.pdfextract.service.PdfExtractServer.instance(PdfExtractServer.java:78) 在 com.it.pes.pdfextract.config.PdfExtractServerConfig.onApplicationEvent(PdfExtractServerConfig.java:24) 在 com.it.pes.pdfextract.config.PdfExtractServerConfig.onApplicationEvent(PdfExtractServerConfig.java:13) 在 com.it.pes.pdfextract.config.PdfExtractServerConfig$$EnhancerBySpringCGLIB$$e703305a.onApplicationEvent() 在 org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) 在 org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) 在 org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) 在 org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883) 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:303) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
观察:我尝试通过 glassfish jersey 注册我的过滤器,但在某些 jars 内部,使用了 1.1.1 的 javax.ws.rs-api,因此存在冲突并且我的应用程序未启动,因此注册了过滤器以上述不同的方式。
您的帮助对我来说将是一个非常好的举措..提前谢谢..
【问题讨论】:
标签: java spring-boot