一件事情,做可能很容易;但坚持一定很难。
之前的Bug分享区,好像每周没那么多可以分享的。那这个模块从这期开始就得“改朝换代”,毕竟物竞天择,适者生存。
自我怀疑区,也就是一些算法题,看似很简单,实则大家尽情发挥,有些题一定会让你自己怀疑你自己是不是个程序员
每篇都会以题目开始,个人解答的答案结尾,如果你有更好的方式,在执行效率和性能上更优,跪求指点。
自我怀疑区
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
正文
日常开发中,一个项目需要查询跨库的场景还是很多的,可能基于大数据必须的分库分表,又或者历史遗留问题,数据还无法完全解耦。就需要一个微服务配置多个数据源来进行数据的CRUD。当然使用传统的Connection也可以做这个事。
Connection conn = DriverManager.getConnection(url,username,password);
但是,既然是基于微服务(SpringBoot)的开发,本篇推荐一种更友好的方式。
新建一个springboot项目
pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.8</version>
</dependency>
application.yml:
#端口
server:
port: 1234
#=======数据源配置=========
spring:
datasource:
dynamic:
primary: master #这里需要配置一个主的数据源
strict: false
datasource:
master: #数据源1 这里名称可以随便定义,上面primary要保持一致
url: jdbc:mysql://localhost:3306/localDB?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
slave_1: #数据源2
url: jdbc:mysql://localhost:3307/needs_manage?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
username: root
password: xiaobei@2020
driver-class-name: com.mysql.cj.jdbc.Driver
#=======配置sql打印日志==========
logging:
level:
org.springframework.jdbc.core.JdbcTemplate: DEBUG
通过mybatis-plus自动生成代码,生成所有层,生成完毕,来添加注解。
serviceImpl层:(忽略掉Redis部分,不是本篇内容)
添加:@DS("master"),也就是配置文件中自定义的数据源名称。
再看一下从数据源(slave):
这里有一点,就是我在类和方法上都添加了@DS注释,这里不要产生误解,是不是必须得这么写?
当然不是的,我这么写的目的就是为了讲解而已!!!!
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
强烈建议只注解在service实现上。
所有的CRUD都是通过 JdbcTemplate 来实现
@Autowired
private JdbcTemplate jdbcTemplate;
总结:简单、快捷、有效。
以上把该写的都写完整就OK了(大家都作为CRUD程序员,其它我就不贴代码了)
一切就绪,写个Controller简单的测试一下。
启动项目,先看下控制台日志,启动成功,同时配置的数据源也打印出来了。
接口测试:Everything is ok👌
参考答案
public static int reverse(int x)
{
int res = 0;
while ( 0 != x){
int num = x % 10;
boolean existed = res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && num > 7);
if (existed)
{
return 0;
}
existed = res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && num < -8);
if (existed)
{
return 0;
}
res = res * 10 + num;
x = x / 10;
}
return res;
}
我这一定不是最好的,但是我所能够想到的方式,如果你有更好的,欢迎赐教~
end