zoukankan      html  css  js  c++  java
  • 利用spring实现服务启动就自动执行某些操作的2种方式

    第一种方式,用bean的init-method属性

    <bean class="com.emax.paycenter.log.LogBridge" init-method="init"></bean>

    第二种方式,实现InitializingBean接口

    @Component
    public class TJUnionAgentPayNotifyTCPServer implements InitializingBean {
    
        private static Logger logger = LogManager.getLogger();
    
        @Autowired
        private ThreadPoolTaskExecutor tjunionNotifyTaskExecutor;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            logger.info("异步线程开启TCP侦听...");
    //        new Thread() {
    //            public void run() {
    //                openTJUnionAgentPayNotifyTCPServer();
    //            }
    //        }.start();
        }
    }

     不过,这种在class名上声明@Component或@Service注解,当启动服务后,发现afterPropertiesSet方法被重复执行两次。寻不得果。

    只好不用注解,改用声明bean的方式,spring默认每个Bean的作用域都是单例。

    <bean class="com.emaxcard.tcpserver.TJUnionAgentPayNotifyTCPServer">
        <property name="tjunionNotifyTaskExecutor" ref="tjunionNotifyTaskExecutor"></property>
    </bean>

    这种情况下,要注意,给bean的私有属性赋值时,这个属性要有公共的set方法,以让spring可以找到。

    2018-11-30 10:28:03,301 ERROR [main] (ContextLoader.java:351) - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.emaxcard.tcpserver.TJUnionAgentPayNotifyTCPServer#0' defined in class path resource [spring.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'tjunionNotifyTaskExecutor' of bean class [com.emaxcard.tcpserver.TJUnionAgentPayNotifyTCPServer]: Bean property 'tjunionNotifyTaskExecutor' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    public class TJUnionAgentPayNotifyTCPServer implements InitializingBean {
    
        private static Logger logger = LogManager.getLogger();
    
        private ThreadPoolTaskExecutor tjunionNotifyTaskExecutor;
    
        public void setTjunionNotifyTaskExecutor(ThreadPoolTaskExecutor tjunionNotifyTaskExecutor) {
            this.tjunionNotifyTaskExecutor = tjunionNotifyTaskExecutor;
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            logger.info("异步线程开启TCP侦听...");
    //        new Thread() {
    //            public void run() {
    //                openTJUnionAgentPayNotifyTCPServer();
    //            }
    //        }.start();
        }
    }
  • 相关阅读:
    SCP测试服务器的上行/下行带宽
    React-Native 之 GD (四)使用通知方式隐藏或显示TabBar
    React-Native 之 GD (五)属性声明和属性确认 及 占位图
    React-Native 之 GD (三)近半小时热门
    React-Native 之 GD (二)自定义共用导航栏样式
    React-Native 之 GD (一)目录结构与第三方框架使用与主题框架搭建
    React Native商城项目实战16
    React Native商城项目实战15
    React Native商城项目实战14
    React Native商城项目实战13
  • 原文地址:https://www.cnblogs.com/buguge/p/10042928.html
Copyright © 2011-2022 走看看