根据AsynchronousFileChannel和AsynchronousChannelGroup的文档,异步 NIO 使用专用线程池,“处理 IO 事件”。我找不到任何明确的说明在这种情况下“处理”是什么意思,但根据this,我很确定在一天结束时,这些专用线程上会发生阻塞。为了缩小范围,我正在使用 Linux 并基于Alex Yursha 的回答,没有非阻塞 IO 之类的东西,只有 Windows 在某些级别上支持它。
我的问题是:使用异步 NIO 与在我自己创建的专用线程池上运行的同步 IO 相比有什么好处?考虑到引入的复杂性,什么情况下仍然值得实施?
我正在尝试保留一个singleton类,并且我想确保它保持单身。同步方法调用的正确方法是什么Spring WebFlux?
我有以下服务方法:
public Mono<SingletonClass> saveOrUpdate(SingletonClass singletonClass) {
return this.getTheSingletonClass()
.map(someLogicAndSave)
.switchIfEmpty(singletonClassRepository.save(singletonClass);
}
Run Code Online (Sandbox Code Playgroud)
我应该在方法中添加synchronized关键字吗saveOrUpdate?
我正在使用OpenShift,我正在尝试将我的应用程序部署到本地Tomcat实例以加快开发速度.我正在使用EclipseLink进行数据库事务,我已经提供了OpenShift在persistence.xml中使用的环境变量,如下所示:
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/mydbname"/>
<property name="javax.persistence.jdbc.user" value="${env.OPENSHIFT_MYSQL_DB_USERNAME}"/>
<property name="javax.persistence.jdbc.password" value="${env.OPENSHIFT_MYSQL_DB_PASSWORD}"/>
Run Code Online (Sandbox Code Playgroud)
我在我的本地机器上使用linux,所以我也将所有这些变量值设置为本地版本(localhost,3306等).我已经仔细检查了它们在终端是否可用.我也试过像这里描述的那样提供它们- 我在Eclipse中打开了Tomcat实例的设置,选择了"Open launch configuration",在Arguments选项卡上,我将它们输入到VM参数中(也尝试了"变量". .."菜单).但是,它不起作用,我在PORT变量上得到NumberFormatException,我想它将原始字符串"$ {env.OPENSHIFT_MYSQL_DB_PORT}"作为端口.
(显然,它也不适用于OpenShift.)
我在哪里可以在Eclipse/Tomcat中设置这些变量值以使其工作?
先感谢您!