Java Web数据源详解

Java Web多数据源动态切换与事务管理实践 本文还有配套的精品资源,点击获取 简介:本Demo演示了如何在Java Web开发中,特别是在基于Spring Boot的项目中实现多数据源的动态切换和配置。通过使用Spring Boot、Druid和MyBatis等技术,我们能够连接和操作多个不同的数据库。尽管Demo实现了数据源的切换,但在同一线程内对不同数据源的操作尚未支持事务管理。文章详细阐述了多数据源的基本概念,... 阅读详情
点击这里使用RSS订阅本Blog: rel="alternate" href="http://feed.feedsky.com/softwave" type="application/rss+xml" title="RSS 2.0" />

Java Web数据源详解

Java Web连接数据库一般有直接JDBC和数据源两种方式,

1、JDBC:

在MySQL中创建数据库:

 

drop    database   if   exists  login;
create   database  login;
use  login;
create   table   user (
   username       
varchar ( 50 )    not   null ,
   password       
varchar ( 50 ) ,
   
primary   key    (username)
);

insert   into   user  (username,password)  values  ("CoderDream", " 12345678 ");
测试代码:
import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.ResultSet;
import  java.sql.Statement;

public   class  Test {
    
public   static   void  main(String[] args) {
        
try  {
            
//  A: 1、2 都可以
            
//  Class.forName("org.gjt.mm.mysql.Driver");  //  1
            Class.forName( " com.mysql.jdbc.Driver " );  //  2

            
//  B: 连接数据库,用户名为:root,密码为空
            Connection conn  =  DriverManager.getConnection(
                    
" jdbc:mysql://localhost:3306/login " ,  " root " ,  "" );

            
//  C: 创建 Statement
            Statement stmt  =  conn.createStatement();

            
//  D: 查询数据库中用户 CoderDream 的密码字段
            String sql  =   " select password from user where username ='CoderDream' " ;

            
//  E: 得到结果集
            ResultSet rs  =  stmt.executeQuery(sql);

            
//  F: 处理结果集,简单的输出password
             while  (rs.next()) {
                System.out.print(rs.getString(
" password " )); // 输出结果为 12345678
            }

            
//  G: 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } 
catch  (Exception e) {
            e.printStackTrace();
        }
    }
}

在Struts中一般会写一个公用类,用于连接数据库:
A、创建数据库:ADDRESSBOOKSAMPLE.sql
DROP   DATABASE   IF   EXISTS  ADDRESSBOOKSAMPLE;
CREATE   DATABASE  ADDRESSBOOKSAMPLE;
USE  ADDRESSBOOKSAMPLE;
CREATE   TABLE  ADDRESSBOOK_TABLE(ID  INT ( 4 ) AUTO_INCREMENT  NOT   NULL   PRIMARY   KEY ,NAME  VARCHAR ( 25 ), PHONE  VARCHAR ( 10 ), ADDRESS  VARCHAR ( 50 ));
INSERT   INTO  ADDRESSBOOK_TABLE  VALUES ( 1 , ' Wang ' , ' 56671234 ' , ' Beijing,Haidian ' );
INSERT   INTO  ADDRESSBOOK_TABLE  VALUES ( 2 , ' Zhang ' , ' 45664568 ' , ' Shanghai,Pudong ' );
INSERT   INTO  ADDRESSBOOK_TABLE  VALUES ( 3 , ' Cheng ' , ' 56643456 ' , ' Tianjing ' );
INSERT   INTO  ADDRESSBOOK_TABLE  VALUES ( 4 , ' Zhao ' , ' 56789988 ' , ' Hainan ' );
INSERT   INTO  ADDRESSBOOK_TABLE  VALUES ( 5 , ' Cao ' , ' 56498543 ' , ' Heibei ' );

B、公用类:DbUtil.java
package  addressbook.model;

import  java.sql.Connection;
import  java.sql.DriverManager;

/**
 * <strong>DbUtil</strong> is a utility class to create a connection to our
 * sample database.
 
*/
public   class  DbUtil {
    
static  String driverName  =   " com.mysql.jdbc.Driver " ;
    
static  String dbUrl  =   " jdbc:mysql:// " ;

    
public  DbUtil() {

    }

    
public   static  Connection connectToDb(String hostName, String databaseName)
            
throws  Exception {
        Connection connection 
=   null ;
        String connName 
=  dbUrl  +  hostName  +   " :3306 "   +   " / "   +  databaseName;
        Class.forName(driverName).newInstance();
        connection 
=  DriverManager.getConnection(connName,  " root " ,  "" );
        
return  connection;
    }

    
public   static  Connection connectToDb(String databaseName)  throws  Exception {
        
return  (connectToDb( " localhost " , databaseName));
    }

    
public   static  Connection connectToDb()  throws  Exception {
        
return  (connectToDb( " localhost " ,  " addressbooksample " ));
    }
}

C、JavaBean中调用公用类:
     public   void  insert()  throws  Exception {
        Connection con = DbUtil.connectToDb();

        PreparedStatement pStmt 
=   null ;
        
try  {
            pStmt 
=  con.prepareStatement( " INSERT INTO  "   +  Constants.TABLENAME
                    
+   "  (name,phone,address) "   +   "  values(?,?,?) " );
            con.setAutoCommit(
false );

            pStmt.setString(
1 , name);
            pStmt.setString(
2 , phone);
            pStmt.setString(
3 , address);
            pStmt.executeUpdate();
            con.commit();
        } 
catch  (Exception ex) {
            
try  {
                con.rollback();
            } 
catch  (SQLException sqlex) {
                sqlex.printStackTrace(System.out);
            }
            
throw  ex;
        } 
finally  {
            
try  {
                pStmt.close();
                con.close();
            } 
catch  (Exception e) {
                e.printStackTrace();
            }
        }
    }

    
public   static  Vector search(String strSql)  throws  Exception {
        Vector addressbookBeans 
=   new  Vector();
        Connection con = DbUtil.connectToDb();
        PreparedStatement pStmt  =   null ;
        ResultSet rs 
=   null ;
        
try  {
            pStmt 
=  con.prepareStatement(strSql);
            rs 
=  pStmt.executeQuery();
            
while  (rs.next()) {
                addressbookBeans.add(
new  AddressBookBean(rs.getString( " NAME " ),
                        rs.getString(
" PHONE " ), rs.getString( " ADDRESS " )));
            }
            
return  addressbookBeans;
        } 
finally  {
            
try  {
                rs.close();
                pStmt.close();
                con.close();
            } 
catch  (Exception e) {
                e.printStackTrace();
            }
        }
    }

2、一般数据源配置

在struts-config.xml的<data-sources>标签中加入:
     <!--  ============ Data Source ===================================  -->
    
< data-sources >
        
< data-source  type ="org.apache.commons.dbcp.BasicDataSource" >
            
< set-property  property ="autoCommit"  value ="true"   />
            
< set-property  property ="description"
                value
="MySQL Data Source"   />
            
<set-property property="driverClassName"
                value
="com.mysql.jdbc.Driver" />
            
< set-property  property ="maxCount"  value ="10"   />
            
< set-property  property ="minCount"  value ="2"   />
            
< set-property  property ="username"  value ="root"   />
            
< set-property  property ="password"  value =""   />
            
< set-property  property ="url"
                value
="jdbc:mysql://localhost:3306/addressbooksample"   />
        
</ data-source >
    
</ data-sources >
同时导入以下包:
mysql-connector-java-5.1.0-bin.jar 
commons-dbcp-1.2.2.jar 
commons-pool-1.3.jar 


注意:这里有个一个属性“ property ="driverClassName"”千万要 写成"driverClassName",而不是“driverClass”,否则会找不到!
孙卫琴的《精通Struts》就是漏掉了Name,让我调试了一个下午。
org.apache.commons.dbcp.BasicDataSource
     protected   synchronized  DataSource createDataSource()
        
throws  SQLException {

        

        
//  Load the JDBC driver class
         if (driverClassName != null ) {
            
try  {
                Class.forName(driverClassName);
            } 
catch  (Throwable t) {
                String message 
=   " Cannot load JDBC driver class ' "   +
                    driverClassName 
+   " ' " ;
                logWriter.println(message);
                t.printStackTrace(logWriter);
                
throw   new  SQLNestedException(message, t);
            }
        }

        
//  Create a JDBC driver instance
        Driver driver  =   null ;
        
try  {
            driver 
=  DriverManager.getDriver(url);
        } 
catch  (Throwable t) {
            String message 
=   " Cannot create JDBC driver of class ' "   +
                (driverClassName 
!=   null   ?  driverClassName :  "" )  +  
                
" ' for connect URL ' "   +  url  +   " ' " ;
            logWriter.println(message);
            t.printStackTrace(logWriter);
            
throw   new  SQLNestedException(message, t);
        }
}
从源代码我们可以看到,如果不是“driverClassName”,就会得不到相应的类名,后面的getDriver(url)就会抛出异常:
[ERROR] ActionServlet  -  Initializing application data source org.apache.struts.action.DATA_SOURCE  < org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of  class   ''   for  connect URL  ' jdbc:mysql://localhost:3306/addressbooksample ' > org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of  class ' ' for connect URL 'jdbc:mysql://localhost:3306/addressbooksample'
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:
1150 )
    at org.apache.commons.dbcp.BasicDataSource.setLogWriter(BasicDataSource.java:
959 )
    at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:
778 )
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:
331 )
    at javax.servlet.GenericServlet.init(GenericServlet.java:
212 )
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:
1139 )
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:
966 )
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:
3956 )
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:
4230 )
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:
760 )
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:
740 )
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:
544 )
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:
920 )
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:
883 )
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:
492 )
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:
1138 )
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:
311 )
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:
120 )
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1022 )
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:
736 )
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1014 )
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:
443 )
    at org.apache.catalina.core.StandardService.start(StandardService.java:
448 )
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:
700 )
    at org.apache.catalina.startup.Catalina.start(Catalina.java:
552 )
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39 )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25 )
    at java.lang.reflect.Method.invoke(Method.java:
597 )
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:
295 )
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:
433 )
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:
264 )
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:
1143 )
     
30  more

提示class ' '不能连接URL!

数据源配置好了以后,我们就可以在Action中得到DataSource。
在InsertAction的execute()方法中:
            DataSource ds  =  getDataSource(request);
            Connection con 
=  ds.getConnection();
                        
            bean.insert(con);


这样,改写Bean中的insert()方法和search()方法,传入参数增加一个“Connection con”:

     public   void  insert(Connection con)  throws  Exception {
        PreparedStatement pStmt 
=   null ;
        
try  {
            pStmt 
=  con.prepareStatement( " INSERT INTO  "   +  Constants.TABLENAME
                    
+   "  (name,phone,address) "   +   "  values(?,?,?) " );
            con.setAutoCommit(
false );

            pStmt.setString(
1 , name);
            pStmt.setString(
2 , phone);
            pStmt.setString(
3 , address);
            pStmt.executeUpdate();
            con.commit();
        } 
catch  (Exception ex) {
            
try  {
                con.rollback();
            } 
catch  (SQLException sqlex) {
                sqlex.printStackTrace(System.out);
            }
            
throw  ex;
        } 
finally  {
            
try  {
                pStmt.close();
                con.close();
            } 
catch  (Exception e) {
                e.printStackTrace();
            }
        }
    }

    
public   static  Vector search(Connection con, String strSql)  throws  Exception {
        Vector addressbookBeans 
=   new  Vector();
        PreparedStatement pStmt 
=   null ;
        ResultSet rs 
=   null ;
        
try  {
            pStmt 
=  con.prepareStatement(strSql);
            rs 
=  pStmt.executeQuery();
            
while  (rs.next()) {
                addressbookBeans.add(
new  AddressBookBean(rs.getString( " NAME " ),
                        rs.getString(
" PHONE " ), rs.getString( " ADDRESS " )));
            }
            
return  addressbookBeans;
        } 
finally  {
            
try  {
                rs.close();
                pStmt.close();
                con.close();
            } 
catch  (Exception e) {
                e.printStackTrace();
            }
        }
    }

这样就不需使用数据库工具类 DbUtil 了。

3、插件方式,任何地方都可以得到数据源。


以一般方式配置的数据源有一个局限性,就是只能在Action中得到,因为要用到HttpServletRequest作为参数来得到数据源。

解决的办法是写一个插件,这个插件实现了Struts的PlugIn接口。

通过这个插件,我们可以在任何类中(包括Action、JavaBean和其他类)直接得到数据源,并建立连接:

 

package  addressbook.plug;

import  java.sql.Connection;
import  java.sql.PreparedStatement;
import  java.sql.ResultSet;
import  java.sql.SQLException;
import  java.sql.Statement;

import  javax.sql.DataSource;

import  org.apache.struts.action.ActionServlet;
import  org.apache.struts.action.PlugIn;
import  org.apache.struts.config.ModuleConfig;

public   class  Conn  implements  PlugIn {

    
private   static  DataSource dataSource  =   null ;
    
private  Connection conn  =   null ;
    
private  PreparedStatement preStmt  =   null ;
    
private  Statement stmt  =   null ;

    
//  得到数据源
     public   void  init(ActionServlet servlet, ModuleConfig config) {
        dataSource 
=  (DataSource) servlet.getServletContext().getAttribute(
                
" org.apache.struts.action.DATA_SOURCE " );
    }

    
public  Conn()  throws  SQLException {
        
if  (dataSource  !=   null ) {
            conn 
=  dataSource.getConnection();
        }
    }

    
public  ResultSet executeQuery(String sql) {
        ResultSet rs 
=   null ;

        
try  {
            
if  (stmt  ==   null ) {
                stmt 
=  conn.createStatement();
            }

            rs 
=  stmt.executeQuery(sql);
        } 
catch  (SQLException e) {
            e.printStackTrace();
        }

        
return  rs;
    }

    
public   void  executeUpdate(String sql)  throws  SQLException {
        
if  (stmt  ==   null ) {
            stmt 
=  conn.createStatement();
        }

        stmt.executeUpdate(sql);
    }

    
public  Connection getConn() {
        
return  conn;
    }

    
public   void  prepareStatement(String sqlStr)  throws  SQLException {
        preStmt 
=  conn.prepareStatement(sqlStr);
    }

    
public   void  setString( int  index, String value)  throws  SQLException {
        preStmt.setString(index, value);
    }

    
public   void  setInt( int  index,  int  value)  throws  SQLException {
        preStmt.setInt(index, value);
    }

    
public   void  setBoolean( int  index,  boolean  value)  throws  SQLException {
        preStmt.setBoolean(index, value);
    }

    
public   void  setLong( int  index,  long  value)  throws  SQLException {
        preStmt.setLong(index, value);
    }

    
public   void  setFloat( int  index,  float  value)  throws  SQLException {
        preStmt.setFloat(index, value);
    }

    
public   void  setBytes( int  index,  byte [] value)  throws  SQLException {
        preStmt.setBytes(index, value);
    }

    
public   void  clearPreStmt()  throws  SQLException {
        preStmt.clearParameters();
        preStmt 
=   null ;
    }

    
public  ResultSet executeQuery()  throws  SQLException {
        
if  (preStmt  !=   null ) {
            
return  preStmt.executeQuery();
        } 
else  {
            
return   null ;
        }
    }

    
public   void  executeUpdate()  throws  SQLException {
        
if  (preStmt  !=   null ) {
            preStmt.executeUpdate();
        }
    }

    
public   void  close() {
        
try  {
            
if  (stmt  !=   null ) {
                stmt.close();
                stmt 
=   null ;
            }

            
if  (preStmt  !=   null ) {
                preStmt.close();
                preStmt 
=   null ;
            }

            
if  (conn  !=   null ) {
                conn.close();
                conn 
=   null ;
                System.out.println(
" **** a connection is closed **** " );
            }
        } 
catch  (Exception e) {
            System.err.println(e.getMessage());
        }
    }

    
public   void  destroy() {
    }
}

在struts-config.xml中配置数据源:
     <!--  ============ Data Source ===================================  -->
    
< data-sources >
        
< data-source  key ="org.apache.struts.action.DATA_SOURCE"
            type
="org.apache.commons.dbcp.BasicDataSource" >
            
< set-property  property ="autoCommit"  value ="true"   />
            
< set-property  property ="description"
                value
="MySQL Data Source"   />
            
< set-property  property ="driverClassName"
                value
="com.mysql.jdbc.Driver"   />
            
< set-property  property ="maxCount"  value ="10"   />
            
< set-property  property ="minCount"  value ="2"   />
            
< set-property  property ="username"  value ="root"   />
            
< set-property  property ="password"  value =""   />
            
< set-property  property ="url"
                value
="jdbc:mysql://localhost:3306/addressbooksample"   />
        
</ data-source >
    
</ data-sources >
同时在struts-config.xml文件的最后配置PlugIn
     <!--  ========== PlugIn Definitions ==============================  -->
    
< plug-in  className ="addressbook.plug.Conn" ></ plug-in >

这样,我们在JavaBean和其他类中就可以直接得到数据源的Connection了:
Connection con  =   new  Conn().getConn();


注意:
    在Struts1.3中已经取消了<data-sources>标签,也就是说只能在1.2版中配置,因为Apache不推荐在struts-config.xml中配置数据源。


参考资料:
1、在struts中以无参数的javabeans的方式调用struts-config.xml中配置的数据源
2、struts数据源管理器
3、struts 数据源问题

源代码:
1 JDBC版:addressbookV1.zip
2普通配置版:addressbookV2.zip
3PlugIn版: addressbookV3.zip

PS: 可以直接将源代码导入eclipse,然后加入Struts 1.2的所有包和另外3个包 mysql-connector-java-5.1.0-bin.jar 、commons-dbcp-1.2.2.jar 、commons-pool-1.3.jar  。
数据库推荐使用BeanSoft的MySQL绿色版。


 转自【http://www.blogjava.net/coderdream/archive/2008/03/26/188687.html】

 

<script type="text/javascript" src="http://www.google.com/reader/ui/publis<script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=grc_p(%7bc%3a%22green%22%2ct%3a%22%5cu8fd9%5cu4e9b%5cu6587%5cu7ae0%5cu4e5f%5cu503c%5cu5f97%5cu4e00%5cu770b%22%2cs%3a%22false%22%7d)%3bnew%20grc"></script>se%22%7D)%3Bnew%20GRC">

java 四种连接数据库数据源 java 四种连接数据库数据源,java 四种连接数据库数据源,java 四种连接数据库数据源 立即下载

相关推荐

几种常用的Java数据源解决方案

Java中的数据源就是javax.sql.DataSource。DataSource的创建可以有不同的实现。 -JNDI方式创建DataSource -Apache提供的简单连接池创建数据源 -C3P0方式创建数据源 -Proxool方式创建数据源 -BoneCP方式创建数据源

Java的几种数据源

记录学习过程中遇到的问题 第一种:使用spring自带的DriverManagerDataSource数据源 比较简单 配置文件如下: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.jdbc.mysql.Driver</value

Angelalcot的博客 1970

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4678

java中的数据源容器有哪些

java数据源

Chen4852010的博客 501

Petalinux 2021.2 下 Qt组件编译报错?手把手教你修改bb文件搞定qt3d/qtquickcontrols2

本文详细解析了Petalinux 2021.2环境下Qt组件(如qt3d、qtquickcontrols2)编译报错的解决方案。通过修改bb文件或使用bbappend文件覆盖,有效解决`petalinux-build --sdk`命令执行时的源码获取失败或哈希校验不匹配问题,并提供验证与调试技巧,帮助开发者快速修复构建流程中断问题。

weixin_29188997的博客 216

避坑指南:ROS2 Humble摄像头标定常见错误排查(从‘CALIBRATE’按钮不变绿到保存文件找不到)

本文详细解析了ROS2 Humble环境下摄像头标定的常见问题及解决方案,从CALIBRATE按钮不变绿到标定文件保存失败等疑难杂症。提供硬件准备、参数设置、实时诊断到结果验证的全流程指导,特别针对Ubuntu2204系统和usb_cam驱动的兼容性问题给出实用建议,帮助开发者高效完成内参标定。

weixin_29193359的博客 398

Java 中 DataSource-数据源 的基础介绍

摘要: Java中的DataSource(数据源)是数据库连接的抽象接口,封装连接配置并提供统一访问方式。其核心优势在于支持连接池实现(如HikariCP),通过复用连接显著提升性能,对比传统DriverManager方式减少70%高并发响应时间。数据源解决了硬编码配置、资源泄漏等问题,Spring Boot默认集成HikariCP,通过简单配置即可使用。开发者可通过自定义配置类调整连接池参数(如最大连接数、空闲超时),实现高效、可控的数据库连接管理。

qq_45464560的博客 1911

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6929

java项目的主流数据库

SQL Server 是微软推出的关系型数据库管理系统,提供了全面的数据库解决方案,包括数据管理、商业智能、高可用性等,适用于企业级应用和数据分析。:PostgreSQL 是一种功能强大的开源关系型数据库管理系统,具有高度的可扩展性和灵活性,适合用于各种规模的应用项目。:Redis 是一种高性能的键值对存储数据库,常用于缓存、消息队列等场景,在 Java 项目中用于提升系统性能和响应速度。:SQLite 是一种轻量级的嵌入式关系型数据库,它以文件形式存储数据库,适合于移动应用和小型项目中使用。

B__B_B的博客 818

【系统架构设计师】2026年上半年真题论文:论高并发系统的设计与实践

本文围绕高并发系统架构设计展开,重点论述了电商秒杀系统的实战经验。文章采用"痛点-解决方案-效果"的逻辑结构,从缓存设计、异步处理、限流降级、数据库优化等6个维度详细阐述了应对高并发的技术策略。其中,重点介绍了多级缓存体系、基于消息队列的异步处理机制和微服务拆分实践,并辅以实际案例说明如何解决超卖、缓存雪崩等典型问题。全文强调高并发设计需要系统性思维,通过空间换时间、异步换吞吐、横向换能力等原则,最终实现系统吞吐量从500TPS提升至20000TPS的性能突破。

数据知道的博客 1160

基于 STM32 的手持式安检金属探测器设计与实现

【代码】基于 STM32 的手持式安检金属探测器设计与实现。

weixin_42300449的博客 901

java数据源有哪些_Java 中常用的数据源

数据源:存储了所有建立数据库连接的信息。就象通过指定文件名你可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。1.JNDI方式创建DataSource1.1 配置数据源的相关连接信息,该配置可以在Tomcat安装目录下的conf/context.xml文件中配置。其配置如下:……type="javax.sql.DataSource"maxActive="100"...

weixin_39868592的博客 991

王者荣耀AI绝悟如何选英雄?

王者荣耀AI绝悟如何选英雄? 【抢射手?抢中单位?「绝悟」在打王者荣耀时是如何选英雄的?】 腾讯 AI Lab 开发的 AI 智能体「绝悟」已让王者峡谷不再只是人类召唤师的竞技场,而且这个 AI 战队在上月底进化成了「完全体」。在一局完整的比赛中,英雄选择阶段是至关重要的(比如五射手或五法师阵容会有官方劝退)。 近日,腾讯 AI Lab 和上海交通大学发布的一篇论文介绍了绝悟的英雄选择策略:Ju...

不断学习,不断进步,提高自己 1万+

java web数据源

前提:项目或者Tomcat有相应数据库的驱动程序 数据源的提出: JDBC的操作中打开数据库连接,操作数据库,关闭数据库,每次操作只有操作可能不同, 每次都打开连接和关闭数据库,会有资源浪费的现象 数据源可以减少数据库的打开和关闭数据库的次数 原理:     1.Co

凡夫 2338

[Dify] -进阶13- 使用“知识库 + 工作流”打造智能推荐系统

本文介绍了在Dify平台上构建智能推荐系统的方法,重点阐述了知识库与工作流技术的结合应用。通过知识库管理RAG流程,实现文档上传、向量嵌入和检索优化;利用工作流设计节点化推荐逻辑,支持并行处理与条件分支。以电话销售话术推荐为例,展示了从数据收集到实时生成的完整流程。该方法具有准确性高、扩展性强、维护简便等优势,可广泛应用于各类推荐场景,实现从数据存储到智能推荐的闭环解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1069

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java web进阶篇(四) Tomcat数据源

动态web开发的最大特点是可以警醒数据库的操作,传统的jdbc操作由于错组哦步骤重复性造成程序性能下降。 西安回顾JDBC的操作原理 1、加载数据库驱动程序,数据库驱动程序通过classpath配置。 2、通过DirverManager类取得数据库连接对象。 3、通过Connection实例化PreparedStatement对象,编写sql语句命令操作数据库。 4、数据库属于资源操作,

ShyBoyes的专栏 1444

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java web mysql教程_Java web之mysql数据源_MySQL

配置这类事,有了框架之后就简单多了。一直用hibernate,再“返璞归真”,又要重温一下。顺便记录,供日后用到之际再做参考。有两种方案:一、局部数据源(在web应用中配置)在Web应用META-INF目录下,建立context.xml文件,内容如下:个别参数稍作说明:maxActive数据库连接池中维护的connection连接数;maxIdle即空闲连接数,与网站的并发量有关,如果网站并发量峰...

weixin_34182361的博客 279

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java web 配置数据源_Javaweb配置常用的数据源配置

DBCPDBCP是Apache推出的数据库连接池(Database Connection Pool)。操作步骤:添加jar包:commons-dbcp-1.4.jarcommons-pool-1.5.6.jar添加属性资源文件dbcpconfig.properties文件。driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost...

weixin_29838911的博客 410

Java web之mysql数据源

yi 记录,仅供参考。

分享,卓越 2205

Java使用JNDI配置WEB项目数据源

Java使用JNDI配置WEB项目数据源 参考http://www.devzeng.com/blog/java-jndi-datasource.html JNDI(Java Naming and Directory Interface,Java命名与目录接口)是Java提供的一种标准的命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI(Service P

shunzi1046的博客 2995

JAVA WEB学习笔记(三)-Tomcat中数据源的配置和使用

一、数据源简介:************************************************************************************在Java语言中,DataSource对象就是一个代表数据源实体的对象。一个数据源就是一个用来存储数据的工具,它可以是复杂的大型企业级数据库,也可以是简单得只有行和列的文件。数据源可以位于在服务器端,也可以位于客服端

pengpenglin的专栏 3001

java中配置数据源_web课程作业中配置数据源的说明

(以下内容是我个人对配置数据源的一点理解,如有错误请指正,不胜感激)web课程的第一次作业的第二个,关于手动配置数据源,不少同学比较困惑,而且我解决之后也未必理解深刻,这份文档只是写一下个人的一些想法,希望能够帮助到大家。PS:老师给的ppt大部分代码是直接可以用的,但可能老师为了让大家解决问题,会故意设置一些错误代码,让大家更深入的理解。用eclipse,myeclipse等开发工具进行过连接数...

weixin_32316643的博客 346

java-web系列(六)---SpringBoot + Mybatis配置多数据源

java-web系列(六)---SpringBoot + Mybatis整合多数据源多数据源的使用场景多数据源配置详解测试声明 多数据源的使用场景 简单来说,Web项目业务功能的实现就是对“数据”的增、删、改、查功能的实现。 以“在TMALL购物”为例,这里的购物过程实现可简单拆分为:TMALL商城浏览商品,挑选要买的商品,下单等过程。 “TMALL商城浏览商品”,就是把&amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;tmall_goods...

UtopiaOfArtoria的博客 982

java web 配置数据源_【Java Web开发学习】Spring配置数据源

Spring配置数据源==============================================================目录===============================================================1、使用JNDI数据源Spring应用程序经常部署在Java EE应用服务器中,如WebSphere、JBoss或甚至像To...

weixin_30916255的博客 219

java从外部得到数据,从Web容器外部访问数据源(通过JNDI)

I'm trying to access a data source that is defined within a web container (JBoss) from a fat client outside the container.I've decided to look up the data source through JNDI. Actually, my persistence...

weixin_28192383的博客 173
上一篇: 货币金额阿拉伯数字转为中文大写
下一篇: Firefox超速绝密方法
系统信息
系统信息 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄23年 2404粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值