当前位置: 首页 > news >正文

高端网站开发案例展示wordpress 微服务

高端网站开发案例展示,wordpress 微服务,合肥瑶海区网站建设方案,开发次元世界前言 在数据库开发中#xff0c;连接池是一种重要的技术手段#xff0c;它可以提高数据库连接的复用性和性能。连接池的原理是在应用启动时创建一定数量的数据库连接#xff0c;并将这些连接保存在一个池中#xff0c;应用程序需要数据库连接时#xff0c;从连接池中获取…前言 在数据库开发中连接池是一种重要的技术手段它可以提高数据库连接的复用性和性能。连接池的原理是在应用启动时创建一定数量的数据库连接并将这些连接保存在一个池中应用程序需要数据库连接时从连接池中获取一个连接进行操作不再频繁地创建和关闭连接。 为了更好地利用连接池并实现连接的复用我们可以借助JDK动态代理机制来实现连接对象的自动重用。通过在动态代理中拦截连接的获取和归还操作我们可以对连接对象进行有效地管理确保每次使用完毕后将连接归还到连接池中从而实现连接的复用提高性能和效率。 接下来我们将结合JDK动态代理机制和连接池技术实现一个基于动态代理的连接池复用功能。 如果不了解 jdk 动态代理的可以去回顾一下我的这篇文章 http://t.csdnimg.cn/BJnzh 一、开始学习 1、新建项目结构如下 2、导入依赖 !-- spring 的核心依赖 --dependencies!-- https://mvnrepository.com/artifact/org.springframework/spring-context --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.23/version/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.4.5/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependency/dependencies 3、在 pool 包下新建三个类ConnectionInvocationHandler、ConnectionPool、ConnUtils ConnUtils 类 Slf4j public class ConnUtils {public static Connection getConnection(String url, String name, String password) {try {return DriverManager.getConnection(url, name, password);} catch (SQLException e) {throw new RuntimeException(connection erro, e);}}}主要是用来获取数据库连接的工具类 ConnectionPool (连接池) Setter public class ConnectionPool {/*** 连接池存放连接的集合*/private LinkedListConnection pool new LinkedList();/*** 连接属性*/private String url;private String name;private String password;/*** 池大小*/private Integer poolSize;/*** 在构造方法中初始化连接池大小**/public void init() throws SQLException {for (int i 0; i poolSize; i) {// 1、从数据库获取连接对象Connection connection ConnUtils.getConnection(url,name,password);// 2、对连接对象创建代理connection createProxy(connection);// 3、将连接对象返回连接池中connection.close();}}/*** 为连接对象创建代理** param connection* return*/private Connection createProxy(Connection connection) {// 创建回调处理器ConnectionInvocationHandler connectionInvocationHandler new ConnectionInvocationHandler(connection,pool);// 获取连接对象的所有接口Class?[] interfaces new Class[]{Connection.class};// 获取类加载器ClassLoader loader ConnectionPool.class.getClassLoader();// 创建代理connection (Connection) Proxy.newProxyInstance(loader,interfaces,connectionInvocationHandler);return connection;}/*** 从池里获取代理连接** return*/public Connection getConnection() {return pool.removeFirst();}/*** 查看连接池的大小* return*/public int size(){return pool.size();}}这个类是一个连接池的实现用于管理数据库连接对象。连接池的作用是在应用程序初始化时创建一定数量的数据库连接并将这些连接保存在连接池中当应用程序需要使用数据库连接时可以从连接池中获取连接使用完毕后将连接放回连接池以便其他线程或请求继续使用。 连接池可以提高数据库的性能和效率主要有以下几个方面的作用 连接的复用连接池中已经创建好的连接可以被反复利用避免频繁地创建和关闭连接从而减少了连接的创建和销毁开销。 连接的管理连接池可以对连接进行有效的管理包括连接的创建、销毁、状态的监控等确保连接的可用性和稳定性。 连接的限制连接池可以设置最大连接数防止因为连接过多导致数据库负载过高或内存资源耗尽从而提高系统的稳定性和安全性。 通过使用连接池可以减少数据库连接的创建和销毁次数提高数据库访问的效率同时能够更好地管理和控制数据库连接的使用确保系统的性能和可靠性。 ConnectionInvocationHandler类 public class ConnectionInvocationHandler implements InvocationHandler {/*** 目标对象被代理对象*/private Connection connection;/*** 连接池*/private LinkedListConnection pool;public ConnectionInvocationHandler(Connection connection, LinkedListConnection pool) {this.connection connection;this.pool pool;}public ConnectionInvocationHandler(Connection connection) {this.connection connection;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 如果当前调用的是 Connection 的 close 方法则将它放回到池中if (close.equals(method.getName())) {// 从池的尾部放回去// 注意:这里放回池中的必须是代理对象而不是目标 Connectionpool.addLast((Connection) proxy);return null;} else {// 除 close 以外的其他方法则正常调用目标对象的行为return method.invoke(connection, args);}} }这是一个代理类实现了InvocationHandler接口用于代理连接对象。主要作用是拦截连接对象的close方法并将其放回连接池中以便其他线程或请求继续使用。 在代理对象调用close方法时ConnectionInvocationHandler会将代理对象即当前正在被使用的连接放回到连接池中而不是直接关闭代理对象。这样可以确保连接池中的连接资源得到充分利用提高应用程序的性能。 在代理对象调用除close以外的方法时ConnectionInvocationHandler会将方法调用转发给目标对象即被代理的连接对象并返回方法的结果。这样可以保证应用程序的正常逻辑对于使用者来说无需关心连接对象被代理的具体实现只需要按照正常的方式使用连接对象即可。 总之ConnectionInvocationHandler是整个连接池的核心之一它负责管理连接对象的生命周期确保连接对象能够得到充分利用和正确释放保障应用程序的性能和可靠性。 4、在 resources 包下新建一个 db.properties 文件 url jdbc:mysql://localhost:3306/psm name root password 123456 poolSize 5 5、在 config 包下新建一个 AppConfig 类 Configuration PropertySource(classpath:db.properties) Slf4j public class AppConfig {Value(${url})private String url;Value(${name})private String userName;Value(${password})private String password;Value(${poolSize})private Integer poolSize;/*** 装配连接池** return*/Beanpublic ConnectionPool connectionPool() throws SQLException {log.info(url: url);log.info(name: userName);log.info(password: password);log.info(size: poolSize);// 创建连接池并设置相关的属性ConnectionPool pool new ConnectionPool();pool.setUrl(url);pool.setName(userName);pool.setPassword(password);pool.setPoolSize(poolSize);// 初始化连接池pool.init();return pool;}}这是一个用于配置连接池的类。通过Configuration注解将它标记为一个配置类并使用PropertySource注解指定了属性文件的位置。 在该类中使用了Value注解来注入属性值。根据属性文件中的配置注入了url、name、password、poolSize等属性值分别表示数据库的URL、用户名、密码和连接池的大小。 在connectionPool()方法中创建了一个ConnectionPool对象并通过setter方法设置了相关属性的值。然后调用init()方法初始化连接池使其预先创建一定数量的数据库连接。 最后将创建好的连接池对象返回以供其他组件或类进行使用。 整个配置类的作用是将属性文件中的配置值注入到连接池对象中并初始化连接池以方便应用程序使用数据库连接。 6、测试 Slf4j public class Main {public static void main(String[] args) throws SQLException {ApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);// 从容器中获取连接池ConnectionPool connectionPool context.getBean(ConnectionPool.class);log.info(连接数 connectionPool.size());Connection conn1 connectionPool.getConnection();Connection conn2 connectionPool.getConnection();log.info(连接数 connectionPool.size());conn1.close();log.info(连接数 connectionPool.size());} } 运行结果 二、 这个案例是干嘛的 这个案例主要用于配置和初始化连接池以便在应用程序中高效地管理数据库连接。它具有以下几个作用 抽象化数据库连接通过使用连接池应用程序可以从简单的直接获取和释放数据库连接的方式转变为通过连接池来获取和释放连接。连接池负责维护一定数量的数据库连接并在需要时提供连接给应用程序使用。这样可以避免频繁地创建和关闭连接提高数据库操作的效率。 提高性能和资源利用率连接池可以预先创建一定数量的数据库连接并将其保存在池中。当应用程序需要数据库连接时可以从连接池中获取连接而不是每次都创建一个新的连接。这样可以避免了频繁地创建和销毁连接的开销提高了数据库操作的性能和资源的利用率。 简化配置和管理通过将连接池的配置信息如URL、用户名、密码、连接池大小等放入属性文件中并通过配置类进行加载和注入可以方便地进行配置和管理。这使得连接池的配置可以与应用程序的其他部分分离易于维护和修改。 总之这个案例提供了一种在应用程序中配置和初始化连接池的方式帮助管理数据库连接提高数据库操作的性能和资源利用率同时简化了配置和管理的过程。 三、总结 这只是一个利用 jdk 动态代理实现的一个简单的连接池的案例仅仅知识实现了连接池的复用连接池中还有很多的 API 方法。 四、gitee 案例 地址ch17/src/main/java/edu/nf/ch17/pool · qiuqiu/spring-framework - 码云 - 开源中国 (gitee.com)
http://www.zqtcl.cn/news/391593/

相关文章:

  • 阳春新农村建设网站欣赏网站
  • 永久免费企业网站建设杭州个人做网站
  • 博罗中山网站建设做网站的软件 知乎
  • 广州网站开发广州亦客网络解答wordpress换空间要改
  • 丽水企业网站开发企业erp系统是什么软件
  • 好看的网站设计个人发布信息的免费平台
  • 电商网站业务流程linux上传中文wordpress
  • 广州网站定制商家外贸seo网站推广
  • 许昌大成建设集团网站wordpress自动博客插件
  • wordpress网站地图插件中国来料加工网
  • 黑龙江做网站的公司上海企业网站建设公
  • 做公众号时图片的网站安徽建设工程造价信息网站
  • 网站开发的在淘宝上是什么类目深圳做网站的大公司
  • 手机网站 html5信阳哪里做网站
  • 网站服务器多少钱一月wordpress 博客宠物
  • 怎么制作网站游戏辽宁建设工程网
  • 网站开发好还要空间吗网站支付链接怎么做的
  • 网站制作报价图片欣赏杭州做网站价格
  • 帮人家做家务的网站host绑定网站
  • 地方门户网站盈利模式这样做微信网站
  • 企业网站要怎么做wordpress w3
  • 网站备案帐号找回密码seo优化工作有哪些
  • 美橙网站建设教程网站建站系统
  • 湖北网站建设公司哪家好重庆建站模板平台
  • 青岛企业建站最新上线的手游
  • 织梦网站wap精品下载
  • 专业做包装的电商网站搜索推广图片
  • 淘客网站佣金建设怎么制作网站页面
  • 网站数据库 mysql如何构建wordpress
  • 牙克石网站建设宁波pc营销型网站制作