1、字节流转字符流时,除了使用字节流实例作为参数,还需要什么参数?
还需要使用字符编码作为参数,保证即使在不同平台上也是使用相同的字符编码(否则会使用平台默认的编码,不同平台默认编码可能不一样)
2、在使用spring service调用方法A时,A上面没有事务标记;同时又在A的内部调用了方法B,B上面有事务标记且其事务传播属性为默认,则方法A、B上开启事务的情况是什么样的?
正常来说因为A上没有事务标记,即A上不开启事务;而B上因为有事务标记,而且事务传播属性为默认,即调用者有事务就假如,没有则自己开启一个事务,所以B上一般是会开启事务的;
但是因为spring的声明式事务是通过springAOP实现的,如果方法A和B在同一个类中,则方法A调用方法B就会是自我调用,而不是通过spring的代理类来调用(即spring声明式事务失效);这种情况下方法A、B都不会开启事务。(解决方案:A、B不在一个类中,或者使用编程式事务替代)
3、集群Tomcat和单例的Tomcat相比在开发过程中需要注意哪些?
集群Tomcat开发注意事项
- 时间同步:
- 重要性:集群中所有的服务器需要保持时间同步。时间差不仅会影响session过期判断,还可能导致集群无法正确建立。
- 实现方式:Linux系统下通常使用ntp协议进行时间同步。可以在每个服务器上设置自动运行脚本,如通过cron任务每天自动同步时间。
- Session管理:
- 会话复制:在集群环境下,需要确保用户的session信息能够在不同的Tomcat节点之间正确复制和共享。这通常通过配置Tomcat的session复制功能来实现。
- Serializable接口:所有放在session里的对象都需要实现
java.io.Serializable
接口,以便能够在不同节点之间进行序列化和反序列化。 - 监听器与过滤器:可能需要在web应用中添加特定的监听器或过滤器来处理session的创建、销毁和迁移等事件。
- Web应用配置:
- web.xml修改:在web应用的
web.xml
文件中增加<distributable/>
标签,以标记该应用支持分布式部署。 - Context配置:在Tomcat的
server.xml
文件中配置<Context>
标签时,可能需要为应用指定特定的部署路径、资源访问控制等参数。
- web.xml修改:在web应用的
- 网络配置:
- IP地址获取:确保每台服务器上的Tomcat进程能够获取到非
127.0.0.1
的IP地址,以便在集群中正确通信。这可能需要修改/etc/hosts
文件或网络配置。 - 端口配置:避免不同Tomcat节点之间的端口冲突,特别是HTTP和AJP等常用端口。
- IP地址获取:确保每台服务器上的Tomcat进程能够获取到非
- 性能与资源优化:
- 负载均衡:集群Tomcat可以通过负载均衡器来分发用户请求,以提高系统性能和可用性。需要根据实际业务需求配置合适的负载均衡策略。
- 内存与线程:合理配置Tomcat的内存大小和线程池参数,以应对高并发请求。避免因为资源不足导致系统崩溃或响应缓慢。
- 故障恢复与容错:
- 冗余部署:在集群中部署多个Tomcat节点可以提高系统的容错能力。当某个节点出现故障时,其他节点可以接管其工作负载。
- 监控与日志:建立完善的监控和日志系统,以便及时发现并处理集群中的异常情况。