日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

netty里集成spring注入mysq连接池(二)

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netty里集成spring注入mysq连接池(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.實現注入
3.1構建applicationContext.xml
在src目錄下建立applicationContext.xml

?

  • <?xml?version="1.0"?encoding="UTF-8"?>?
  • <beans?xmlns="http://www.springframework.org/schema/beans"?
  • ????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?
  • ????????xmlns:aop="http://www.springframework.org/schema/aop"?
  • ????????xmlns:tx="http://www.springframework.org/schema/tx"?
  • ????????xsi:schemaLocation=" ?
  • ????????????http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ?
  • ????????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ?
  • ????????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">?
  • </beans>?
  • 3.1構建注入開始點
    在HttpServer.java里加入

    ?

  • private?BeanFactory?beanFactory; ?
  • ?
  • ????public?HttpServer()?{ ?
  • ????????ClassPathResource?classPathResource?=?new?ClassPathResource( ?
  • ????????????????"applicationContext.xml"); ?
  • ????????beanFactory?=?new?XmlBeanFactory(classPathResource); ?
  • ????} ?
  • ????public?Object?getBean(String?beenName){ ?
  • ????????return?beanFactory.getBean(beenName); ?
  • ????} ?
  • 3.2注入HttpServerPipelineFactory
    在applicationContext.xml里加入

    ?

  • <bean?id="httpServerPipelineFactory"?class="org.jboss.netty.example.http.snoop.HttpServerPipelineFactory"?scope="prototype">?
  • </bean>?
  • 修改HttpServer.java的main函數

    ?

  • public?static?void?main(String[]?args)?{ ?
  • ????//?Configure?the?server. ?
  • ????ServerBootstrap?bootstrap?=?new?ServerBootstrap( ?
  • ????????????new?NioServerSocketChannelFactory( ?
  • ????????????????????Executors.newCachedThreadPool(), ?
  • ????????????????????Executors.newCachedThreadPool())); ?
  • ????HttpServer?httpServer?=?new?HttpServer(); ?
  • /???????提取httpServerPipelineFactory ?
  • ????HttpServerPipelineFactory?httpServerPipelineFactory=(HttpServerPipelineFactory)httpServer.getBean("httpServerPipelineFactory"); ?
  • ????//?Set?up?the?event?pipeline?factory. ?
  • ????bootstrap.setPipelineFactory(httpServerPipelineFactory); ?
  • ?
  • ????//?Bind?and?start?to?accept?incoming?connections. ?
  • ????bootstrap.bind(new?InetSocketAddress(8081)); ?
  • } ?
  • 3.3HttpServerPipelineFactory注入HttpRequestHandler
    把applicationContext.xml里beans內容改為
    ?

  • <bean?id="httpServerPipelineFactory"?class="org.jboss.netty.example.http.snoop.HttpServerPipelineFactory"?scope="prototype">?
  • ????????<property?name="httpRequestHandler"?ref="httpRequestHandler"?/>?
  • ?????</bean>?
  • ?????<bean?id="httpRequestHandler"?class="org.jboss.netty.example.http.snoop.HttpRequestHandler"?scope="prototype">?
  • ?????</bean>?
  • 修改HttpServerPipelineFactory.java的main函數

    ?

  • public?class?HttpServerPipelineFactory?implements?ChannelPipelineFactory?{ ?
  • ????private?HttpRequestHandler?httpRequestHandler; ?
  • ?
  • ????public?void?setHttpRequestHandler(HttpRequestHandler?httpRequestHandler)?{ ?
  • ????????this.httpRequestHandler?=?httpRequestHandler; ?
  • ????} ?
  • ?
  • ????public?HttpRequestHandler?getHttpRequestHandler()?{ ?
  • ????????return?httpRequestHandler; ?
  • ????} ?
  • ????public?ChannelPipeline?getPipeline()?throws?Exception?{ ?
  • ????????//?Create?a?default?pipeline?implementation. ?
  • ????????ChannelPipeline?pipeline?=?pipeline(); ?
  • ?
  • ????????//?Uncomment?the?following?line?if?you?want?HTTPS ?
  • ????????//?SSLEngine?engine?= ?
  • ????????//?SecureChatSslContextFactory.getServerContext().createSSLEngine(); ?
  • ????????//?engine.setUseClientMode(false); ?
  • ????????//?pipeline.addLast("ssl",?new?SslHandler(engine)); ?
  • ?
  • ????????pipeline.addLast("decoder",?new?HttpRequestDecoder()); ?
  • ????????//?Uncomment?the?following?line?if?you?don't?want?to?handle?HttpChunks. ?
  • ????????//?pipeline.addLast("aggregator",?new?HttpChunkAggregator(1048576)); ?
  • ????????pipeline.addLast("encoder",?new?HttpResponseEncoder()); ?
  • ????????//?Remove?the?following?line?if?you?don't?want?automatic?content ?
  • ????????//?compression. ?
  • ????????pipeline.addLast("deflater",?new?HttpContentCompressor()); ?
  • ????????pipeline.addLast("handler",?httpRequestHandler); ?
  • ????????return?pipeline; ?
  • ????} ?
  • } ?
  • 3.3HttpRequestHandler注入mysql連接池
    把applicationContext.xml里beans內容改為

    ?

  • ?<?xml?version="1.0"?encoding="UTF-8"?>?
  • ?
  • <!-- ?
  • ??-?Application?context?definition?for?JPetStore's?business?layer. ?
  • ??-?Contains?bean?references?to?the?transaction?manager?and?to?the?DAOs?in ?
  • ??-?dataAccessContext-local/jta.xml?(see?web.xml's?"contextConfigLocation"). ?
  • ??-->?
  • <beans?xmlns="http://www.springframework.org/schema/beans"?
  • ????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?
  • ????????xmlns:aop="http://www.springframework.org/schema/aop"?
  • ????????xmlns:tx="http://www.springframework.org/schema/tx"?
  • ????????xsi:schemaLocation=" ?
  • ????????????http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ?
  • ????????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ?
  • ????????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">?
  • ? ?
  • ??????<!--?===================================?配置Spring數據源?=========================================?-->?
  • ????????<bean?id="dataSource"?class="org.apache.commons.dbcp.BasicDataSource"??????? ?
  • ????????????destroy-method="close">??????? ?
  • ????????<property?name="driverClassName"?value="com.mysql.jdbc.Driver"?/>???????? ?
  • ????????<property?name="url"?value="jdbc:mysql://192.168.13.105:3306/gslb?useUnicode=true&amp;characterEncoding=utf-8"?/>?????? ?
  • ????????<property?name="username"?value="gslb"?/>?????? ?
  • ????????<property?name="password"?value="testpass"?/>? ?
  • ????????<property?name="maxIdle"?value="10"/>?
  • ????????<property?name="maxActive"?value="100"/>?
  • ????????<property?name="maxWait"?value="10000"/>?
  • ????????<property?name="validationQuery"?value="select?1"/>?
  • ????????<property?name="testOnBorrow"?value="false"/>?
  • ????????<property?name="testWhileIdle"?value="true"/>?
  • ????????<property?name="timeBetweenEvictionRunsMillis"?value="1200000"/>?
  • ????????<property?name="minEvictableIdleTimeMillis"?value="1800000"/>?
  • ????????<property?name="numTestsPerEvictionRun"?value="5"/>?
  • ????????<property?name="defaultAutoCommit"?value="true"/>?
  • ????</bean>?
  • ????<!--? ?
  • ????????BasicDataSource提供了close()方法關閉數據源,所以必須設定destroy-method=”close”屬性, ?
  • ????????以便Spring容器關閉時,數據源能夠正常關閉。除以上必須的數據源屬性外, ?
  • ?????????還有一些常用的屬性:? ?
  • ????????defaultAutoCommit:設置從數據源中返回的連接是否采用自動提交機制,默認值為?true;? ?
  • ????????defaultReadOnly:設置數據源是否僅能執行只讀操作,?默認值為?false;? ?
  • ????????maxActive:最大連接數據庫連接數,設置為0時,表示沒有限制;? ?
  • ????????maxIdle:最大等待連接中的數量,設置為0時,表示沒有限制;? ?
  • ????????maxWait:最大等待秒數,單位為毫秒,?超過時間會報出錯誤信息;? ?
  • ????????validationQuery:用于驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據, ?
  • ??????????????????????????如你可以簡單地設置為:“select?count(*)?from?user”;? ?
  • ????????removeAbandoned:是否自我中斷,默認是?false?;? ?
  • ????????removeAbandonedTimeout:幾秒后數據連接會自動斷開,在removeAbandoned為true,提供該值;? ?
  • ????????logAbandoned:是否記錄中斷事件,?默認為?false; ?
  • ?????-->?
  • ????<bean?id="databaseUtil"?class="org.jboss.netty.example.http.snoop.DatabaseUtil">?
  • ????????<property?name="dataSource"?ref="dataSource"?/>?
  • ????</bean>?
  • ?????<bean?id="httpServerPipelineFactory"?class="org.jboss.netty.example.http.snoop.HttpServerPipelineFactory"?scope="prototype">?
  • ????????<property?name="httpRequestHandler"?ref="httpRequestHandler"?/>?
  • ?????</bean>?
  • ?????<bean?id="httpRequestHandler"?class="org.jboss.netty.example.http.snoop.HttpRequestHandler"?scope="prototype">?
  • ????????<property?name="databaseUtil"?ref="databaseUtil"?/>?
  • ?????</bean>? ?
  • </beans>?
  • 修改HttpRequestHandler.java

    ?

  • ?package?org.jboss.netty.example.http.snoop; ?
  • ?? ?
  • ??import?static?org.jboss.netty.handler.codec.http.HttpHeaders.*; ?
  • ??import?static?org.jboss.netty.handler.codec.http.HttpHeaders.Names.*; ?
  • ??import?static?org.jboss.netty.handler.codec.http.HttpResponseStatus.*; ?
  • ??import?static?org.jboss.netty.handler.codec.http.HttpVersion.*; ?
  • ?? ?
  • import?java.sql.Connection; ?
  • import?java.sql.PreparedStatement; ?
  • import?java.sql.ResultSet; ?
  • ??import?java.util.List; ?
  • ??import?java.util.Map; ?
  • ??import?java.util.Map.Entry; ?
  • ??import?java.util.Set; ?
  • ?? ?
  • ??import?org.jboss.netty.buffer.ChannelBuffer; ?
  • ??import?org.jboss.netty.buffer.ChannelBuffers; ?
  • ??import?org.jboss.netty.channel.ChannelFuture; ?
  • ??import?org.jboss.netty.channel.ChannelFutureListener; ?
  • ??import?org.jboss.netty.channel.ChannelHandlerContext; ?
  • ??import?org.jboss.netty.channel.ExceptionEvent; ?
  • ??import?org.jboss.netty.channel.MessageEvent; ?
  • ??import?org.jboss.netty.channel.SimpleChannelUpstreamHandler; ?
  • ??import?org.jboss.netty.handler.codec.http.Cookie; ?
  • ??import?org.jboss.netty.handler.codec.http.CookieDecoder; ?
  • ??import?org.jboss.netty.handler.codec.http.CookieEncoder; ?
  • ??import?org.jboss.netty.handler.codec.http.DefaultHttpResponse; ?
  • ??import?org.jboss.netty.handler.codec.http.HttpChunk; ?
  • ??import?org.jboss.netty.handler.codec.http.HttpChunkTrailer; ?
  • ??import?org.jboss.netty.handler.codec.http.HttpRequest; ?
  • ??import?org.jboss.netty.handler.codec.http.HttpResponse; ?
  • import?org.jboss.netty.handler.codec.http.HttpResponseStatus; ?
  • ??import?org.jboss.netty.handler.codec.http.QueryStringDecoder; ?
  • import?org.jboss.netty.util.CharsetUtil; ?
  • ?? ?
  • ??/** ?
  • ???*?@author?<a?href="http://www.jboss.org/netty/">The?Netty?Project</a> ?
  • ???*?@author?Andy?Taylor?(andy.taylor@jboss.org) ?
  • ???*?@author?<a?href="http://gleamynode.net/">Trustin?Lee</a> ?
  • ???* ?
  • ???*?@version?$Rev:?2368?$,?$Date:?2010-10-18?17:19:03?+0900?(Mon,?18?Oct?2010)?$ ?
  • ???*/?
  • ??public?class?HttpRequestHandler?extends?SimpleChannelUpstreamHandler?{ ?
  • ?? ?
  • ??????private?DatabaseUtil?databaseUtil; ?
  • ??????private?HttpRequest?request; ?
  • ??????private?boolean?readingChunks; ?
  • ??????/**?Buffer?that?stores?the?response?content?*/?
  • ??????private?final?StringBuilder?buf?=?new?StringBuilder(); ?
  • ?? ?
  • ??????@Override?
  • ??????public?void?messageReceived(ChannelHandlerContext?ctx,?MessageEvent?e)?throws?Exception?{ ?
  • ?
  • ??????????????System.out.println("messageReceived"); ?
  • ??????????????HttpRequest?request?=?this.request?=?(HttpRequest)?e.getMessage(); ?
  • ?? ?
  • ??????????????buf.setLength(0); ?
  • ??????????????QueryStringDecoder?queryStringDecoder?=?new?QueryStringDecoder(request.getUri()); ?
  • ??????????????Map<String,?List<String>>?params?=?queryStringDecoder.getParameters(); ?
  • ?????????????? ?
  • ??????????????if?(!params.isEmpty())?{ ?
  • ??????????????????HttpResponseStatus?httpResponseStatus=HttpResponseStatus.OK; ?
  • ?????????????????? ?
  • ??????????????????if(params.containsKey("username")){ ?
  • ??????????????????????if(params.containsKey("password")){ ?
  • ??????????????????????????List<String>?values=params.get("username"); ?
  • ??????????????????????????String?username=""; ?
  • ??????????????????????????if(values.size()>0){ ?
  • ??????????????????????????????username=values.get(0); ?
  • ??????????????????????????} ?
  • ??????????????????????????values=params.get("password"); ?
  • ??????????????????????????String?password=""; ?
  • ??????????????????????????if(values.size()>0){ ?
  • ??????????????????????????????password=values.get(0); ?
  • ??????????????????????????} ?
  • ??????????????????????????try{ ?
  • ??????????????????????????????Connection?conn=databaseUtil.getConnection(); ?
  • ??????????????????????????????if(conn!=null){ ?
  • ??????????????????????????????????//查詢用戶名和密碼是否匹配 ?
  • ??????????????????????????????????PreparedStatement?ps=databaseUtil.getPrepStatement(conn,"select?count(*)?from?user?where?name=??and?password=?"); ?
  • ??????????????????????????????????ps.setString(1,?username); ?
  • ??????????????????????????????????ps.setString(2,?password); ?
  • ??????????????????????????????????ResultSet?rs=ps.executeQuery(); ?
  • ??????????????????????????????????if(rs.next()){ ?
  • ??????????????????????????????????????if(rs.getInt(1)>0){ ?
  • ??????????????????????????????????????????buf.append("FOUND");?? ?
  • ??????????????????????????????????????}else{ ?
  • ??????????????????????????????????????????buf.append("FOUND");? ?
  • ??????????????????????????????????????} ?
  • ??????????????????????????????????}else{ ?
  • ??????????????????????????????????????buf.append("QUERY?ERROR");? ?
  • ??????????????????????????????????} ?
  • ??????????????????????????????????databaseUtil.closeResultSet(rs); ?
  • ??????????????????????????????????databaseUtil.closePrepStatement(ps); ?
  • ??????????????????????????????????databaseUtil.closeConnection(conn); ?
  • ??????????????????????????????}else{ ?
  • ??????????????????????????????????buf.append("connot?connect?mysql"); ?
  • ??????????????????????????????} ?
  • ??????????????????????????}catch(Exception?e1){ ?
  • ??????????????????????????????e1.printStackTrace(); ?
  • ??????????????????????????????buf.append("QUERY?ERROR");? ?
  • ??????????????????????????}?? ?
  • ??????????????????????}else{ ?
  • ??????????????????????????buf.append("miss?password"); ?
  • ??????????????????????} ?
  • ??????????????????}else{ ?
  • ??????????????????????buf.append("miss?username"); ?
  • ??????????????????}??????? ?
  • ??????????????????writeResponse(e,httpResponseStatus,buf); ?
  • ??????????????}else{ ?
  • ??????????????????buf.append("miss?username?and?password"); ?
  • ??????????????????writeResponse(e,OK,buf); ?
  • ??????????????} ?
  • ?????} ?
  • ? ?
  • ?????private?void?writeResponse(MessageEvent?e,HttpResponseStatus?httpResponseStatus,StringBuilder?buf)?{ ?
  • ?????????//?Decide?whether?to?close?the?connection?or?not. ?
  • ?????????boolean?keepAlive?=?isKeepAlive(request); ?
  • ? ?
  • ?????????//?Build?the?response?object. ?
  • ?????????HttpResponse?response?=?new?DefaultHttpResponse(HTTP_1_1,?httpResponseStatus); ?
  • ?????????response.setContent(ChannelBuffers.copiedBuffer(buf.toString(),?CharsetUtil.UTF_8)); ?
  • ?????????response.setHeader(CONTENT_TYPE,?"text/plain;?charset=UTF-8"); ?
  • ? ?
  • ?????????//?Write?the?response. ?
  • ?????????ChannelFuture?future?=?e.getChannel().write(response); ?
  • ? ?
  • ?????????//?Close?the?non-keep-alive?connection?after?the?write?operation?is?done. ?
  • ?????????future.addListener(ChannelFutureListener.CLOSE); ?
  • ?????} ?
  • ? ?
  • ?????private?void?send100Continue(MessageEvent?e)?{ ?
  • ?????????HttpResponse?response?=?new?DefaultHttpResponse(HTTP_1_1,?CONTINUE); ?
  • ?????????e.getChannel().write(response); ?
  • ?????} ?
  • ? ?
  • ?????@Override?
  • ?????public?void?exceptionCaught(ChannelHandlerContext?ctx,?ExceptionEvent?e) ?
  • ?????????????throws?Exception?{ ?
  • ?????????e.getCause().printStackTrace(); ?
  • ?????????e.getChannel().close(); ?
  • ?????} ?
  • ?
  • ????public?void?setDatabaseUtil(DatabaseUtil?databaseUtil)?{ ?
  • ????????this.databaseUtil?=?databaseUtil; ?
  • ????} ?
  • ?
  • ????public?DatabaseUtil?getDatabaseUtil()?{ ?
  • ????????return?databaseUtil; ?
  • ????} ?
  • ?} ?
  • 4.測試
    訪問
    http://127.0.0.1:8081/sdf?username=test1&password=1bbd886460827015e5d605ed44252221獲得FOUND即可
    ?

    ?項目源代碼見:http://down.51cto.com/data/227126





    ? ? ?本文轉自yifangyou 51CTO博客,原文鏈接:http://blog.51cto.com/yifangyou/622608,如需轉載請自行聯系原作者




    總結

    以上是生活随笔為你收集整理的netty里集成spring注入mysq连接池(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。