Advertisement

SpringBoot-整合Druid,银行java开发面试题

阅读量:

druid

1.1.21

2.配置数据源

因为Spring Boot 2.0及以上版本预设配置为 com.zaxxer.hikari.HikariDataSource 数据源, 因此可以通过配置 spring.datasource.type 参数来指定数据源

spring:

datasource:

username: root

password: 123456

#?serverTimezone=UTC解决时区的报错

用于连接到本地数据库的MySQL数据库引擎...

driver-class-name: com.mysql.cj.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource #自定义数据源

3.测试数据源是否切换成功

@SpringBootTest

class DemoApplicationTests {

//DI注入数据源

@Autowired

DataSource dataSource;

@Test

void contextLoads() throws SQLException {

//看一下默认数据源

System.out.println(dataSource.getClass());

//获得连接

Connection connection = dataSource.getConnection();

System.out.println(connection);

}

}

输出:

数据源切换成功!

4. 基于需求配置数据源连接的起始规模、最大同时连接数、等待时长以及最低同时连接数 等相关设置项

application.yml:

spring:

datasource:

username: root

password: 123456

#?serverTimezone=UTC解决时区的报错

url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

driver-class-name: com.mysql.cj.jdbc.Driver

type: com.alibaba.druid.pool.DruidDataSource #自定义数据源

#Spring Boot 默认是不注入这些属性值的,需要自己绑定

#druid 数据源专有配置

initialSize: 5

minIdle: 5

maxActive: 20

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

minEvictableIdleTimeMillis: 300000

validationQuery: SELECT 1 FROM DUAL

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

配置监控统计拦截的过滤器,在 stat 上设置为 监控统计,在 log4j 上启用 日志记录功能,并在 wall 上启用 防御 SQL 注入 保护

#日志配置失败错误:ClassNotFoundException: log4j

则需引入 log4j 依赖方能实现相关配置,请参考 Maven 官网地址:https://mvnrepository.com/artifact/log4j/log4j.

filters: stat,wall,log4j

maxPoolPreparedStatementPerConnectionSize: 20

useGlobalDataSourceStat: true

connectionsProperties: Druid.stat.merge_sql = five hundred ms; Druid.stat.slow_sql_time = five hundred ms

注意 :这个时候这些配置还没生效,不信我们编写测试方法进行测试一下:

我们上面配置的数据源最大连接数是20,初始化连接数是5 。我们看下是否有生效:

@SpringBootTest

class DemoApplicationTests {

//DI注入数据源

@Autowired

DataSource dataSource;

@Test

void contextLoads() throws SQLException {

//看一下默认数据源

System.out.println(dataSource.getClass());

//获得连接

Connection connection = dataSource.getConnection();

System.out.println(connection);

DruidDataSource druidDataSource = (DruidDataSource) dataSource;

输出/druidDataSource 数据源的最大连接数:并调用/druidDataSource.getMaxActive()/。

System.out.print("查询数据源初始化连接数:" + druidDataSource.getInitialSize());

//关闭连接

connection.close();

}

}

输出:

通过观察发现,在这种情况下仍为默认设置(即未完成自定义属性的配置)。由于我们尚未将自定义属性进行配置

由于上面的配置使用到了日志,故我们导入一下Log4j 的依赖:

log4j

log4j

1.2.17

5.绑定全局配置文件中的参数

我们可以将 DruidDataSource 的全局配置文件参数配置好,并同时将其加入容器中;这样就不必依赖于 Spring Boot 自动生成了。

我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性

编写一个配置类:DruidConfig

@Configuration

public class DruidConfig {

/*

将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建

将全局配置文件中的druid数据源属性配置为com.alibaba.druid.pool.DruidDataSource以使其生效

@ConfigurationProperties(prefix = "spring.datasource"):其功能就是负责处理 全局配置文件中的内容

将 spring.datasource 属性作为前缀赋值给 com.alibaba.druid.pool.DruidDataSource 对应参数

*/

@ConfigurationProperties(prefix = “spring.datasource”)

@Bean

public DataSource druidDataSource() {

return new DruidDataSource();

}

}

测试方法:

@SpringBootTest

class DemoApplicationTests {

//DI注入数据源

@Autowired

DataSource dataSource;

@Test

void contextLoads() throws SQLException {

//看一下默认数据源

System.out.println(dataSource.getClass());

//获得连接

Connection connection = dataSource.getConnection();

System.out.println(connection);

DruidDataSource druidDataSource = (DruidDataSource) dataSource;

使用System.out.print打印出数据源的最大连接数(数据源):调用druidDataSource.getMaxActive()获取该值。

System.out.print("dataSource 数据源初始化连接数量:" + dataSource.getInitialSize!);

//关闭连接

connection.close();

}

}

输出:

可以发现,我们自定义的值已经生效了。

3.配置Druid数据源监控

==============

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看。

我们需要设置 Druid 的后台管理页面,如登录账号、密码 等

//配置 Druid 监控管理后台的Servlet;

当内置的Servlet容器未配置web.xml文件时,则应采用Spring Boot提供的默认ServletContext配置方式

@Bean

public ServletRegistrationBean statViewServlet() {

ServerContextBean bean = new instance of ServletRegistrationBean(new StatViewServlet(), Druid路径);

// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet

// 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到

Map<String, String> initParams = new HashMap<>();

initParams.put(“loginUsername”, “yixin”); //后台管理界面的登录账号

initParams.put(“loginPassword”, “123456”); //后台管理界面的登录密码

//后台允许谁可以访问

//initParams.put(“allow”, “localhost”):表示只有本机可以访问

//initParams.put(“allow”, “”):为空或者为null时,表示允许所有访问

initParams.put(“allow”, “”);

//deny:Druid 后台拒绝谁访问

//initParams.put(“test”, “服务器地址”);表示禁止此ip访问

//设置初始化参数

bean.setInitParameters(initParams);

return bean;

}

配置完毕,启动项目

访问:http://localhost:8080/druid/login.html

简单介绍一下自己吧!我于2013年毕业于上海交通大学,在校期间积累了一定的经验。之后曾在一家小公司工作过一段时间,并且也曾在华为、OPPE(原OPPO)等知名科技公司工作过。自2018年以来一直在阿里巴巴工作至今。

清楚知道大多数Java工程师在追求技能提升时常常采取自主学习或参加培训的方式。然而对于多数人来说在没有系统指导的情况下独自学习效率低下。面对高昂的学费支出确实让人感到压力重重。在缺乏结构化学习情况下个人效率低下且耗时漫长。遇到技术瓶颈时难以突破更是让人沮丧。

为此我特意收集整理了一份《2024年Java开发全套学习资料》,其出发点很简单也很直接——就是希望能为渴望提升技能却又迷茫不知所措的人提供一套完整的资料,并在这一过程中减轻大家在学习过程中可能感受到的压力。

img
img
img
img
img
img

不仅包含适合初学者入门学习的基础知识文档,
还设有针对有3年以上前端开发经验者的专业级深入课程,
几乎覆盖了95%以上的Java核心知识点,
构成了一个完整系统化的知识体系!

因为文件较大,在此处仅对部分目录大纲进行截图展示。具体而言,在每个节点中均包含大厂面试题库、学习笔记、源码解析材料以及实际工作案例,并附有教学视频作为补充资源。这些内容将陆续完善并持续更新以满足需求。

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)

img

最后

刷题作为一种有效的方法,在备考中尤为重要。推荐按照专题划分来进行练习,并且从基础到进阶、循序渐进地进行操作能够显著提升学习效果。同时我将这些内容整理成一个PDF文档,并将其分为几个主要模块

  • Java基础部分
  • 算法与编程
  • 数据库部分
  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

这份面试文档除了基础内容之外, 其中涵盖了JVM. 设计模式. ZK. MQ以及数据结构等其他相关技术领域的内容. 由于篇幅限制, 在此仅对其中的部分技术进行介绍.

作为一名程序员,在系统性地进行阶段性学习的同时,在持续性上也有所要求。本次在这一阶段中,重点知识点进行了系统复习,在巩固基础的同时也拓展了知识面和深度。

  • Java基础部分

[外链图片转存中…(img-H3UcvqxE-1712110099375)]

  • 算法与编程

[外链图片转存中…(img-Ig97drc0-1712110099375)]

  • 数据库部分

[外链图片转存中…(img-SR5tBIdA-1712110099376)]

  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

[外链图片转存中…(img-q1hlrSEY-1712110099376)]

这份面试文档不仅涵盖的内容更为丰富,在涉及JVM以及设计模式等多个技术领域时也会有相应的考察内容;具体而言,在涉及JVM、设计模式以及ZK等相关技术领域时

作为一名程序员来说,定期的学习是一个不可少的过程,并且持续性也是确保专业成长的重要因素。在这一阶段期间,我对一些重点知识点进行了系统而深入的学习,一方面能够夯实自己的专业知识基础,另一面则有助于拓展知识面并加深对技术的理解。

全部评论 (0)

还没有任何评论哟~