Java程序猿搬砖笔记(十一)
Hexo博客 Next主题图片防盗链问题
问题场景:打开博客,所有引用外部链接的图片均无法正常加载,但是所有图片复制链接在浏览器请求是可以加载的。
问题原因:目标网站图片设置了防盗链。
解决方案:在 \themes\next\layout_partials\head.swig文件中加一行代码即可。
参考链接、参考链接
Springboot Druid数据库密码加密配置步骤
方式一:
- 找到druid包的位置,CMD命令行执行下面的命令
1 | java -cp druid-1.2.6.jar com.alibaba.druid.filter.config.ConfigTools 数据库密码 > pwd.txt |
- 把项目中的解密公钥和密文改为pwd.txt中的publicKey、password
方式二:
- 在项目中运行下面的代码:
1 | public static void main(String[] args) throws Exception { |
- 把项目中的解密公钥、密文分别改为上面代码中输出的publicKey、password
注意:
- Druid的版本一定要一致
用druid-1.1.9.jar生成的公钥和密文在druid-1.2.6.jar中项目直接解密失败 - 公钥和密文一定要同时替换
同一个Jar包多次生成公钥,前后几个字符串是一样的,但是中间的不一样。
Java统计字符串出现的次数
- 方法一:使用Java8的流和Lambda表达式
代码示例:
1 | String str = "你好/454/545/"; |
返回结果:
3
- 方法二:使用Spring框架中的StringUtils
1 | int count = StringUtils.countOccurrencesOf("你好/454/545/", "/"); |
- 方法三:使用commons-lang3工具类中的StringUtils
1 | int count = StringUtils.countMatches("你好/454/545/", "/"); |
- 方法四:使用HashMap
该方法可以统计字符串中每个字符出现的次数:
1 | private static Map<Character, Integer> countsOfCharacter(String str){ |
调用示例:
1 | String str = "你好/454/545/"; |
返回结果:
3
Java获取某个字符在字符串中出现第N次的位置
1 | /** |
Maven激活指定profile
1 | mvn package -P 待激活的profile |
Maven中resources标签的用法详解
一旦pom当中添加resource,指定某一个文件,就会导致resources其他文件(java文件不会丢)打包的时候丢失。
1 | <resources> |
打包文件中只有a.properties。
另外,当filtering为false时,配置文件用@@,取不到值。
MySQL 字符集不一致报错
Cause: java.sql.SQLException: Incorrect string value: ‘\xE9\x87\x91\xE5\x87\xA1…’ for column ‘username’ at row 1
; uncategorized SQLException for SQL []; SQL state [HY000]
检查建表时字符集:
在MySQL 8.0版本之前,默认字符集为latin1。
解决方法:
建表时添加默认字符集,示例代码如下:
1 | COMMENT='用户信息历史表' |
EasyExcel日期格式化
添加@DateTimeFormat注解,参考代码如下:
1 | import com.alibaba.excel.annotation.format.DateTimeFormat; |
@Configuration、@Component、@Controller等注解
@Configuration注解:
- 本质上还是@Component
- 配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)
- 配置类不能是 final 类(没法动态代理)
- 配置类必须是非本地的(即不能在方法中声明,不能是 private)
- @Bean 方法可能不会反过来创建进一步的配置类(也就是返回的 bean 如果带有 @Configuration,也不会被特殊处理,只会作为普通的 bean)
@Component、@Controller、@Service、@Repository这四个注解实际上没有任何本质区别,只是后三者只是涉及一些命名规范而已,四者的注解效果确实一致。关于这里的命名规范就好比苹果叫苹果,你不会说苹果是菠萝。这样的好处显然易见,听到别人说苹果,你就知道是苹果,不会想到菠萝。
实际上这四个注解实际上没有任何本质区别,如果你喜欢,你完全可以把这四个注解当成一个注解用,当然这样的话老板可能就不喜欢你了。
参考链接、参考链接
Java泛型方法
在方法中出现了泛型的结构,这样的方法叫做泛型方法。
泛型参数与类的泛型参数没有任何关系,换句话说,泛型方法所属的类是不是泛型类都没有关系。
泛型方法可以声明为static。 方法使用类的泛型不能声明为static。
Java泛型-类型通配符:<?>
1 | List<?>是List<String>、List<Object>等各种泛型List的父类。 |
Java泛型-有限制的通配符(上下界)
- 上界extends
使用时指定的类型必须是继承某个类(或者实现某个接口),即**<=** - 下界super
使用时指定的类型不能小于操作的类(或接口),即**>=**
示例代码如下:
定义类:
1 | public class Order { |
测试通配符初始化:
1 | public class Test { |
测试通配符取值:
1 | public class Test { |
测试通配符添加值:
1 | public class Test { |
SpringBoot下mybatis-plus如何打印sql日志和参数到日志文件
Maven的mirror镜像和仓库
mirror简介
说明:
- Maven优先从镜像中下载,找不到再从中央仓库(默认配置)下载
默认中央仓库地址:https://repo.maven.apache.org/maven2 - 可以配置多个
- id可以随便写,不重复就行
- name对仓库进行一些描述
如果配置多个mirror,首先按照搜索顺序优先级搜索,相同优先级的repository根据配置顺序搜索。
mirrorOf的不同类型
1 | // 对所有仓库id镜像,你配置的所有仓库都不起作用了 |
仓库jar包下载顺序
1 | 本地仓库 -> settings_profile_repo -> pom_profile_repo -> pom_repositories -> settings_mirror -> central |
仓库分类
(简书)Maven中配置mirrorOf和仓库
(CSDN)深入理解Maven的私服(Nexus)和仓库(Repository)以及settings中的mirror和mirrorOf
在windows环境下,后台运行jar包并打印后台日志
run.bat脚本如下:
1 | off |
注意:run.bat放在和jar包同一个目录
停止Windows环境下的Java服务
1 | // 查看进程号 |