undertow.devMode=true 的时候,会导致单例失效,创建两个对象
代码信息如下
单例对象
public enum LocalManager { INSTANCE; private final Map<String, Body> personMap = new ConcurrentHashMap<>(); private final OrganDataBasket<DataBean> dataBasket = new OrganDataBasket<>(); public void addPerson(Body body) { personMap.put(body.getName(), body); System.out.println(body); System.out.println(personMap.size()); } public Body findBody(String name) { return personMap.get(name); } }
Controller
@Path(value = "/", viewPath = "/index") public class LocalController extends Controller { public void index() { Body body = LocalManager.INSTANCE.findBody("tai2"); List<MsgParam> allMsg = body.getBrain().getAllMsg(); set("allMsg", allMsg); render("index.html"); } }
启动代码
public class SmallLauncher { public static void main(String[] args) { Body tai2 = new Body("tai2",false); LocalManager.INSTANCE.addPerson(tai2); UndertowServer.start(LocalConfig.class); } }
undertow.devMode=true 的时候,会导致创建两个LocalManager对象
undertow.devMode=fale 的时候,只会创建一个LocalManager对象
可以确定是开启热部署 HotswapWatcher功能引起的
还望波总关注一下
将 LocalManager 那段代码想办法挪到项目内部的某个地方调用