发表于: 2018-02-28 22:10:27
1 729
今天完成的任务:
1.client端随机调用两个service
1.1service端的配置。
在本机配置2个不同端口的service并启动,配置两个xml就可以了。
<property name="registryPort" value="1199"/>
注册端口改为不相同的两个值。
1.2client端配置。
想把serviceUrl随机注入,但是xml中没办法实现。
复习了一下spring注入的内容,发现使用javaconfig的方式配置bean可以在配置过程中写代码。
//@Configuration
//public class AppConfig {
//
// private static final Logger logger = (Logger) LoggerFactory.getLogger(AppConfig.class);
//
// @Bean(name="studentService")
// public RmiProxyFactoryBean rmiProxyFactoryBean(){
// String rmi = RandomService.getRandomServicermi();
// RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
// rmiProxyFactoryBean.setServiceUrl(rmi);
// rmiProxyFactoryBean.setServiceInterface(StudentService.class);
// //连接错误自动重连
// //rmiProxyFactoryBean.setRefreshStubOnConnectFailure(true);
// //不在容器启动的时候创建server端连接
//// rmiProxyFactoryBean.setLookupStubOnStartup(false);
// try{
// rmiProxyFactoryBean.afterPropertiesSet();
// }catch (Exception e) {
//// throw new RemoteException("Error create rmi proxy");
// RmiProxyFactoryBean rmiProxyFactoryBean1 = new RmiProxyFactoryBean();
// rmiProxyFactoryBean1.setServiceUrl(RandomService.getanotherrmi(rmi));
// rmiProxyFactoryBean1.setServiceInterface(StudentService.class);
// logger.info("正在是用服务:"+RandomService.getanotherrmi(rmi));
// return rmiProxyFactoryBean1;
// }
// logger.info("正在是用服务:"+rmi);
// return rmiProxyFactoryBean;
// }
遇到的问题:
1.client随机调用一个service可以使用了。但是如何实现在一个service宕机的时候切换的另一个service?因为bean的装配在程序启动的时候就已经装配好了,运行过程中没有办法改变,也没有找到捕获异常的办法。
解决办法:看了几位师兄的日报,都是使用ClassPathXmlapplicationcontext 然后getBean来捕获DI中的异常。
try {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RmiConfig.class);
studentService = (StudentService) context.getBean("rmiservice1199");
logger.info("service1199 action");
} catch (Exception e) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RmiConfig.class);
studentService = (StudentService) context.getBean("rmiservice1198");
logger.info("service1199 bad to service1198 action");
}
收获:
1.学会了简单使用javaconfig配置spring。
@Configuration
@ComponentScan
public class RmiConfig {
@Bean(name = "rmiservice1199")
@Lazy
public RmiProxyFactoryBean studentService1(){
RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
rmiProxyFactoryBean.setServiceUrl("rmi://127.0.0.1:1199/RemoteService");
rmiProxyFactoryBean.setServiceInterface(StudentService.class);
return rmiProxyFactoryBean;
}
2.又复习了一遍spring的di内容,了解了单例和原型,但是原型使用没有成功,可能是理解还有点问题。
- 单例(singleton):整个应用中,只创建一个bean实例
- 原型(prototype):每次注入或者获取,都会创建新的bean实例
明天的计划:
1.使用nginx配置2个web,然后调用2个service。如果顺利总结任务8提交任务。
评论