首页
归档
友链
关于
Search
1
网易云音乐黑胶会员月月免费赠送
2,970 阅读
2
十年之约RSS聚合订阅服务上线
2,532 阅读
3
工资发放日的区别
2,215 阅读
4
rsyslogd内存占用过高解决方案
2,168 阅读
5
Nginx反代MinIO后,上传文件签名异常
2,071 阅读
零碎
标本
码海
工具
其他
登录
Search
标签搜索
北京
摄影
Java
旅行
生活
学习笔记
教程
Linux
服务器
软件
SpringBoot
日记
Windows
服务
数据库
福利
Spring
系统
SQL
前端
萧瑟
累计撰写
190
篇文章
累计收到
1,268
条评论
首页
栏目
零碎
标本
码海
工具
其他
页面
归档
友链
关于
搜索到
43
篇与
码海
的结果
2021-09-30
Java线程等待
最近十年之约的RSS订阅升级了,原本订阅地址失效了,不想错失大佬们发表的精彩博文,故向创始人申请了一个API权限。 谁知道大量请求造成错误: 429 Too Many Requests , 后来发现是我请求过于频繁了。我就想到可以将线程等待几秒再执行,每天大概就请求接口这一次,不在乎数据是否实时。所以找到以下方法并做个记录。方法一:通过线程的sleep方法在需要程序等待的地方加入这个语句,实现让程序等待,这里的参数1000是以毫秒为单位,即这语句可以让程序等待1秒。Thread.currentThread().sleep(1000); 方法二:TimeUnit类里的sleep方法TimeUnit类提供的方法,其实底层调用的也是Thread类的sleep方法,让程序进行等待。只不过他在上层根据时间单位进行了封装,如下列代码,共有7种可以选择,可以方便的选择自己需要的时间单位进行使用。TimeUnit.DAYS.sleep(1);//天 TimeUnit.HOURS.sleep(1);//小时 TimeUnit.MINUTES.sleep(1);//分 TimeUnit.SECONDS.sleep(1);//秒 TimeUnit.MILLISECONDS.sleep(1000);//秒 TimeUnit.MICROSECONDS.sleep(1000);//微妙 TimeUnit.NANOSECONDS.sleep(1000);//纳秒
2021年09月30日
330 阅读
2 评论
2021-09-15
自动推送jar包到nexus私服
每次手动上传都特别麻烦,所以就简单研究了一下自动推送。首先在你要推送jar包的项目的pom文件中,加入如下配置:<distributionManagement> <repository> <!-- 要和下边配置id一直 --> <id>nexus-test</id> <name>admin</name> <!-- 你要推送的地址 --> <url>http://nexus.bcrjl.com/repository/maven-releases/</url> </repository> </distributionManagement>在 Maven 设置文件settings.xml中添加以下配置:<servers> <server> <id>nexus-test</id> <!-- 登录的用户名 --> <username>admin</username> <!-- 登录的密码 --> <password>admin123</password> </server> </servers>如果推送的时候出现 500 或者 404 错误,请前往 Nexus 后台修改仓库的 Deployment policy 为 Allow redeploy然后在 IDEA 或者 Maven 中执行clean 、 package 、 deploy 就可以推送成功了。
2021年09月15日
360 阅读
2 评论
2021-07-22
Java常见的工具库
Java有很多工具类库,可以大大简化代码量,提升开发效率。而这些类库早就成为了业界标准类库,大公司的内部也都在使用,来总结一下。
2021年07月22日
123 阅读
0 评论
2021-06-15
git for windows下的Filename too long
使用 git 提交代码的时候出现了错误:fatal: adding files failed百度查资料说文件没有保存,但是文件都是正常的,细看一下文件的详细错误,提示的内容是 Filename too long 原因是git可以创建4096长度的文件名,而Windows的文件名最大长度是260,因为git用了旧版本的windows api,为此踩了个坑。解决方案执行以下命令即可。git config --global core.longpaths true
2021年06月15日
268 阅读
1 评论
2021-05-29
Java poi设置页脚页码奇偶数不同展示
最近遇到一个问题,就是导出word设置页脚的页码且奇偶数不同,效果如下。 贴一下代码,记录一下。/** * 创建页脚 * * @param document doc对象 * @throws IOException * @throws NoSuchFieldException * @throws IllegalAccessException */ public static void createFooter(XWPFDocument document) throws IOException, NoSuchFieldException, IllegalAccessException { Field _settings = XWPFDocument.class.getDeclaredField("settings"); _settings.setAccessible(true); XWPFSettings xwpfsettings = (XWPFSettings) _settings.get(document); Field _ctSettings = XWPFSettings.class.getDeclaredField("ctSettings"); _ctSettings.setAccessible(true); org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings ctSettings = (org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings) _ctSettings.get(xwpfsettings); ctSettings.addNewEvenAndOddHeaders(); XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT); //奇数 XWPFParagraph paragraph = footer.createParagraph(); paragraph.setAlignment(ParagraphAlignment.RIGHT); XWPFRun run; run = paragraph.createRun(); run.setText("— "); CTFldChar fldChar = run.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); setXWPFRunStyle(run, "宋体", 14); CTText ctText = run.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); setXWPFRunStyle(run, "宋体", 14); fldChar = run.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); run.setText(" —"); //偶数 XWPFParagraph paragraph1 = document.createFooter(HeaderFooterType.EVEN).createParagraph(); paragraph1.setAlignment(ParagraphAlignment.LEFT); XWPFRun run1; run1 = paragraph1.createRun(); run1.setText("— "); CTFldChar fldChar1 = run1.getCTR().addNewFldChar(); fldChar1.setFldCharType(STFldCharType.Enum.forString("begin")); setXWPFRunStyle(run1, "宋体", 14); CTText ctText1 = run1.getCTR().addNewInstrText(); ctText1.setStringValue("PAGE \\* MERGEFORMAT"); ctText1.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); setXWPFRunStyle(run1, "宋体", 14); fldChar1 = run1.getCTR().addNewFldChar(); fldChar1.setFldCharType(STFldCharType.Enum.forString("end")); run1.setText(" —"); } /** * 设置页脚的字体样式 * * @param r1 段落元素 * @param font 字体 * @param fontSize 字体大小 */ private static void setXWPFRunStyle(XWPFRun r1, String font, int fontSize) { r1.setFontSize(fontSize); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii(font); fonts.setEastAsia(font); fonts.setHAnsi(font); }参考文档: poi设置word奇偶页不同-segmentfault
2021年05月29日
365 阅读
0 评论
2021-05-27
Java 基础类型互相转换
Java 基础类型互相转换,int,String 转Integer、String 转Integer、String、Integer转为int、Integer转换为float, double, long、所有类型转String
2021年05月27日
165 阅读
2 评论
2021-05-24
yml基本语法
YML是什么YAML (YAML Aint Markup Language)是一种标记语言,通常以.yml或者.yaml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。YML的优点YAML易于人们阅读。YAML数据在编程语言之间是可移植的。YAML匹配敏捷语言的本机数据结构。YAML具有一致的模型来支持通用工具。YAML支持单程处理。YAML具有表现力和可扩展性。YAML易于实现和使用。YML语法1.约定 k: v 表示键值对关系,冒号后面必须有一个空格使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的大小写敏感缩进时不允许使用Tab键,只允许使用空格。松散表示,Java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。2.键值关系 (以Java语言为例,其它语言类似)对于键与值主要是看能否表示以下内容。普通的值(数字、字符串、布尔)、日期、对象、数组、集合等。1) 普通值(字面量)k: v:字面量直接写;字符串默认不用加上单引号或者双绰号;“”: 双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据name1: zhangsan name2: 'zhangsan \n lisi' name3: "zhangsan \n lisi" age: 18 flag: true2)日期date: 2019/01/013)对象(属性和值)、Map(键值对)在下一行来写对象的属性和值的关系,注意缩进people: name: zhangsan age: 20行内写法:people: {name:zhangsan,age: 20}4)数组、list、set用- 值表示数组中的一个元素pets: - dog - pig - cat行内写法:pets: [dog,pig,cat]5)数组对象、list对象、set对象peoples: - name: zhangsan age: 22 - name: lisi age: 20 - {name: wangwu,age: 18}6)Java代码示例Java代码(省略get,set方法)public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Dog> lists; private Dog dog; private String[] arr; } public class Dog { private String name; private Integer age; }对应的ymlperson: boss: false maps: k1: v1 k2: 14 lists: - name: d1 age: 2 - name: d2 age: 3 - {name: d3,age: 4} birth: 2017/12/15 dog: name: p_dog age: 15 age: 13 last-name: 张三 arr: [s1,s2,s3]3.文档块对于测试环境,预生产环境,生产环境可以使用不同的配置,如果只想写到一个文件中,yml与是支持的,每个块用----隔开server: port: 8081 spring: profiles: active: prod #激活对应的文档块 --- server: port: 8083 spring: profiles: dev #指定属于哪个环境 --- server: port: 8084 spring: profiles: prod #指定属于哪个环境
2021年05月24日
197 阅读
0 评论
2021-05-23
SpringBoot yml配置文件注入List和Map
SpringBoot 在yml配置文件注入List和Map,可动态修改,方便快速。
2021年05月23日
643 阅读
0 评论
2021-05-21
Java Spring @autowired和@resource注解的区别
区别1、@Autowired注解由Spring提供,只按照byType注入;@resource注解由J2EE提供,默认按照byName自动注入。2、@Autowired默认按类型进行装配,@Resource默认按照名称进行装配。Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解。如:@Resource、@PostConstruct及@PreDestroy@Autowired由Spring提供,只按照byType注入@Resource由J2EE提供,默认按照byName自动注入@Resource有两个重要的属性:name和typeSpring将@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。@Resource装配顺序:(1)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常(2)如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常(3)如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常(4)如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。使用区别(1)@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上(2)@Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。(3)@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring的耦合。
2021年05月21日
207 阅读
0 评论
2021-05-21
Java Map中forEach小结
HashMapHashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。AbstractMap实现了Map接口,Map接口里面有一个forEach方法。官方解释对此映射中的每个条目执行给定操作,直到所有条目已处理或操作引发异常。除非由实现类指定,操作将在入口集迭代的顺序(如果指定了迭代顺序)。操作引发的异常将中继到调用方。解读使用了try catch 抛出的异常为ConcurrentModificationException,标示在线程并发进行读写的时候会出现异常,即,不支持并发操作。使用方法Map<Object, Object> map = new HashMap<>(); map.put("name", "xiaose"); map.put("gender", "男"); map.put("phone", "18888888888"); map.put(null, null); //1.Map的迭代 // 通用的Map迭代方式 System.out.println("==============Map的迭代======================"); for (Map.Entry<Object, Object> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } System.out.println("===================================="); // JDK8的迭代方式 map.forEach((key, value) -> { System.out.println(key + ":" + value); });输出内容==============Map的迭代====================== null:null gender:男 phone:18888888888 name:xiaose ==================================== null:null gender:男 phone:18888888888 name:xiaose
2021年05月21日
209 阅读
0 评论
1
...
3
4
5