SpringMVC 多线程问题 大神戳进来!!!!!!求教

相逢都是久别重逢 发布于 2016/05/31 15:07
阅读 1K+
收藏 0

系统是用Spring+MyBais做的。现在要一个单独线程将从串口中读取的数据写入数据库。

程序写好的,不知道放哪,怎么启动

加载中
0
luamas
luamas

两种实现方式,一种是采用spring,现实InitializingBean,或者采用系统注册.注解@PostConstruct,两个都必须是web环境

反对撒
我也建议用楼上这种方式 简单改动小
OSC_代码审查官
OSC_代码审查官
建议采用楼上说的这种,实现简单,只需要在你现有的代码上配置一个bean就行了
1
相逢都是久别重逢

引用来自“StateGrace”的评论

两种实现方式,一种是采用spring,现实InitializingBean,或者采用系统注册.注解@PostConstruct,两个都必须是web环境

package org.lichengmeng.thread;


import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;


import java.io.IOException;
import java.io.InputStream;


import javax.annotation.PostConstruct;


import org.springframework.stereotype.Component;




@Component
public class TempReadAndSave {

@PostConstruct
    public void init()
    {
try {
(new TempReadAndSave()).connect("COM4");
} catch (Exception e) {
e.printStackTrace();
}
    }

    void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
            CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
            
            if ( commPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) commPort;
                
                serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
                
                InputStream in = serialPort.getInputStream();
                
               (new Thread(new SerialReader(in))).start();


            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }
        }     
    }
    
    /** */
    public static class SerialReader implements Runnable 
    {
        InputStream in;
        
        public SerialReader ( InputStream in )
        {
            this.in = in;
        }
        
        public void run ()
        {
            int data[] = new int[8];
            float temp,decade,unit;
            int i = 0;
            try
            {
                while (true)
                {
                data[i++] = in.read();
                    if(i>=7)
                    {
                
                for( int j=0; j<7 ;j++)
                {
                if((data[j] == -1) && (j+1 <= 6) && (data[j+1] != -1))
                {
                decade = Integer.valueOf(Integer.toHexString(data[++j]));
                unit = Integer.valueOf(Integer.toHexString(data[++j]));
                temp = decade + unit/10;
                                //dao操作
                System.out.println(temp);
              
                   }
                            
                   }
                i=0;
                    }


                }                
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }finally
            {
            try {             
in.close();
} catch (IOException e) {
e.printStackTrace();
}
            }            
        }
    }




}




我启动tomcat后没有反应是什么原因
0
反对撒
配置一个任务就好了或者自己实现一个线程 然后在tomcat启动的时候 启动这个线程
相逢都是久别重逢
我把线程程序写好了,不知道怎么在web中随系统启动
0
OSC_代码审查官
OSC_代码审查官
spring event,job,thread不都可以实现吗?
相逢都是久别重逢
菜鸟刚学,能给个例子吗
0
温安适
温安适

其实有很多方法,介绍一种简单的,就是写监听器,具体

<listener>
		<display-name>initListener</display-name>
		<listener-class>XXX.InitServlet</listener-class>
	</listener>



public class InitServlet implements ServletContextListener {
	
	private static Logger logger = LoggerFactory.getLogger(InitServlet.class);
	
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
//写你的代码
}



之后即可tomcat启动,之后自动启动服务

0
kongjun
kongjun
在 web.xml 里声明一个 listen,tomcat 启动的时候会初始化。
0
我_承宇
我_承宇
万能的监听器
0
东向利
东向利

不用,注解成Bean就可以了,然后在一个方法中加一个PostConstruct注解,使用这个方法启动线程就可以了。

0
Isronik
Isronik

Spring 有一个Scheduled的annotation~

参考如下:

https://spring.io/guides/gs/scheduling-tasks/


返回顶部
顶部