1. 单独仓库配置 打开Maven配置文件 apache-maven-3.6.3\conf\settings.xml 在<mirrors></mirrors>标签里新增一个mirror配置即可。
1 2 3 4 5 6 7 8 |
<mirrors> <mirror> <id>aliyun</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> |
标签 作用 id 镜像的唯一标识 name 名称描述 url 地址 mirrorOf 指定镜像规则,什么情况下从镜像仓库拉取 mirrorOf规则 作用 * 匹配所有,所有内容都从镜像拉取 external:* 除了本地缓存的所有从镜像仓库拉取 central 覆盖默认的仓库 repo1,repo2 匹配仓库repo1和repo2,使用逗号分割多个远程仓库 比如:镜像配置的规则 <mirrorOf>repo1</mirrorOf>,意为:匹配到目标仓库 <id>repo1</id>; 所以maven认为目标仓库central被镜像了; 不再去 https://repo.maven.apache.org/maven2/ 地址下载jar包; 而是去镜像仓库 http://maven.aliyun.com/nexus/content/groups/public/ 下载jar包。 2. 多仓库配置 有时候我们需要的jar包公有仓库没有,此时就必须启用多仓库配置,使maven同时使用私有仓库和公有仓库。 在<profiles></profiles>标签里配置多个profile配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<profiles> <profile> <id>aliyun-repo</id> <repositories> <repository> <id>aliyun</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profile> <id>jboss-repo</id> <repositories> <repository> <id>jboss</id> <url>http://repository.jboss.org/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profile> <id>maven-repo</id> <repositories> <repository> <id>maven2</id> <url>http://central.maven.org/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profiles> |
在<activeProfiles></activeProfiles>标签里使用<activeProfile></activeProfile>标签启用配置。
1 2 3 4 5 |
<activeProfiles> <activeProfile>aliyun-repo</activeProfile> <activeProfile>jboss-repo</activeProfile> <activeProfile>maven-repo</activeProfile> </activeProfiles> |
from:https://www.aliang.link/pages/df2aeb/#_2-%E5%A4%9A%E4%BB%93%E5%BA%93%E9%85%8D%E7%BD%AE
View Details问题:安装java出现内部错误61003,安装成功输入java -version提示无法打开dll文件
原因:没有装visual c++2015 redistributable
解决方案 下载并安装该插件
安装 visual c++2015 redistributable
链接 https://www.microsoft.com/en-us/download/details.aspx?id=48145
View Details1.java.lang.System类 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
1 |
System.currentTimeMillis(); |
2.Calendar类 先由getInstance获取Calendar对象,然后用clear方法将时间重置为(1970.1.1 00:00:00),接下来用set方法设定指定时间,最后用getTimeMillis获取毫秒值。
1 2 3 4 5 6 |
Calendar calendar = Calendar.getInstance(); calendar.clear(); //指定时间的毫秒数 calendar.set(2021, 0, 1); long millis = calendar.getTimeInMillis(); |
※ Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。 3.java.util.Date类、SimpleDateFormat类 先由时间格式创建SimpleDateFormat对象,然后通过parse方法由指定时间创建Date对象,最后由Date对象的getTime方法获取毫秒值。
1 2 3 4 5 6 7 8 9 10 11 |
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd"); Date date = null; try { //指定时间的毫秒数 date = format.parse("2021-01-01"); } catch (ParseException e) { e.printStackTrace(); } long millis = date.getTime(); |
测试
1 2 3 4 5 6 7 8 9 10 |
public static void test() { long curTime1 = System.nanoTime(); System.out.println("System.currentTimeMillis() " + System.currentTimeMillis() + " 耗时(ns):" + (System.nanoTime() - curTime1)); long curTime2 = System.nanoTime(); System.out.println("new Date().getTime() " + new Date().getTime() + " 耗时(ns):" + (System.nanoTime() - curTime2)); long curTime3 = System.nanoTime(); System.out.println("Calendar.getInstance().getTimeInMillis() " + Calendar.getInstance().getTimeInMillis() + " 耗时(ns):" + (System.nanoTime() - curTime3)); } |
结果 System.currentTimeMillis() 1630315030949 耗时(ns):39600 new Date().getTime() 1630315030949 耗时(ns):500300 Calendar.getInstance().getTimeInMillis() 1630315030956 耗时(ns):19424400 参考: https://www.cnblogs.com/jpfss/p/10455524.html 转载请注明出处:BestEternity亲笔。 from:https://blog.csdn.net/BestEternity/article/details/119998914
View DetailsSpring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于AOP,将具体业务逻辑与事务处理解耦。
声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。
声明式事务有两种方式,一种是在配置文件中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。
昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。
View DetailsList<类> list; 代表某集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//返回 对象集合以类属性一升序排序 list.stream().sorted(Comparator.comparing(类::属性一)); //返回 对象集合以类属性一降序排序 注意两种写法 list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序 list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序 //返回 对象集合以类属性一升序 属性二升序 list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二)); //返回 对象集合以类属性一降序 属性二升序 注意两种写法 list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序 list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二));//先以属性一降序,再进行属性二升序 //返回 对象集合以类属性一降序 属性二降序 注意两种写法 list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序 list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序 //返回 对象集合以类属性一升序 属性二降序 注意两种写法 list.stream().sorted(Comparator.comparing(类::属性一).reversed().thenComparing(类::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序 list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(类::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序 //空/Null数据排序 list.stream().sorted(Comparator.comparing(类::属性一).thenComparing(item -> item.属性二, Comparator.nullsLast(Date::compareTo))).collect(Collectors.toList()); //空/Null数据分组 Map<String, List<类>> map = list.stream().collect(Collectors.groupingBy(item -> { if (item.属性一 == null || item.属性一.equals("")) { return ""; } return DateFormat.getDateInstance().format(item.属性一); })) |
———————————————— 版权声明:本文为CSDN博主「小屁孩大帅-杨一凡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_41722928/article/details/111993964
View DetailsJava中String.format()的简单用法介绍 在运用字符串的时候,我们常常会用到String.fromat()函数来对字符串进行加工,得到我们想要的格式,那我们就来看看一些简单用法。 String.format()函数相当于将括号内的量,按照自己的想要的格式拼接成一个字符串,然后输出。作用效果有点像C语言中的printf()函数。 常用转换符: ①通用浮点数: 比%f,%a长度更短的一种格式输出,显示6位有效数字,而且会进行四舍五入。 ②散列码: 不必用冗长的线性搜索技术来查找一个键,而是用一个特殊的值,名为“散列码”。散列码可以获取对象中的信息,然后将其转换成那个对象“相对唯一”的整数(int)。所有对象都有一个散列码。
View Details在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. 例1:
1 2 3 4 5 6 7 8 9 10 11 |
String str = "123"; try { int a = Integer.parseInt(str); } catch (NumberFormatException e) { e.printStackTrace(); } |
例2:
1 2 3 4 5 6 7 8 9 10 11 |
String str = "123"; try { int b = Integer.valueOf(str).intValue() } catch (NumberFormatException e) { e.printStackTrace(); } |
在转换过程中需要注意,因为字符串中可能会出现非数字的情况,所以在转换的时候需要捕捉处理异常。 from:https://blog.csdn.net/a772304419/article/details/79723249
View Details用法一:常量
用法二:switch
用法三:向枚举中添加新方法
用法四:覆盖枚举的方法
用法五:实现接口
用法六:使用接口组织枚举
用法七:关于枚举集合的使用