常用的一些工具类
//第一种
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd"));
String str = JSON.toJSONString(u,config);
//第二种
JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd";
String str = JSON.toJSONString(u,SerializerFeature.WriteDateUseDateFormat);
//第三种
String str = JSON.toJSONStringWithDateFormat(u, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat);
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.junbaor.test.App</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- 1.Mybatis插入null改为空字符串
insert指定列,如果value为null,表字段的默认值不会生效导致报错。
sql里可以参考mysql的ifnull函数ifnull(#{userName},''),oracle对应nvl()
<insert id="insert" parameterType="com.github.xjs.springbootdemo.dao.Users">
insert into users (id, user_name)
values (#{id}, ifnull(#{userName},''))
</insert>
- 2.mysql大分页优化
# mysql的查询完全命中索引的时候,称为覆盖索引,是非常快的,因为查询只需要在索引上进行查找,之后可以直接返回,而不用再回数据表拿数据.
# 因此我们可以先查出索引的ID,然后根据Id拿数据
select * from (select id from job limit 1000000,100) a left join job b on a.id = b.id;
- 3.insert on duplicate key update
<insert id="insertOnDuplicateKeyUpdate"
parameterType="com.github.xjs.domain.UserEntity" useGeneratedKeys="true" keyProperty="id" >
insert into user_entity
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">name,</if>
<if test="age != null">age,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name,jdbcType=VARCHAR},</if>
<if test="age != null">#{age,jdbcType=INTEGER},</if>
</trim>
<trim prefix="ON DUPLICATE KEY UPDATE" suffixOverrides=",">
<if test="name != null">name = #{name,jdbcType=VARCHAR},</if>
<if test="age != null">age = #{age,jdbcType=INTEGER},</if>
</trim>
</insert>
<!--
1. 如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。
2. 所以 ON DUPLICATE KEY UPDATE是不能写where条件的
3. 如果插入了一个新行,则受影响的行数是1,如果修改了已存在的一行数据,则受影响的行数是2,如果值不变,则受影响行数是0
-->
- 4.insert on duplicate key update容易引发死锁 替换的办法:
try{
insert();
}catch(DuplicateKeyExceprion e){
update();
}
mvn deploy:deploy-file -DgroupId=*** -DartifactId=*** -Dversion=*** -Dpackaging=jar -Dfile="***.jar" -Dsources="***-sources.jar" -Durl=http://***/nexus/content/repositories/releases/ -DrepositoryId=nexus-release --settings D:\apache-maven-3.6.3\conf\settings.xml
正则替换:^[\s\t]*\n
document.selection.SelectAll();
document.selection.Text = JSON.stringify(JSON.parse(document.selection.Text), null, '\t');
- 1.日期处理
@JsonComponent
public class DateConfigure {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() {
return builder -> {
TimeZone tz = TimeZone.getTimeZone("GMT+8");
DateFormat df = new SimpleDateFormat(pattern);
df.setTimeZone(tz);
builder.failOnEmptyBeans(false)
.failOnUnknownProperties(false)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.dateFormat(df);
};
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer localDateTimeCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)));
}
}
//如果有特殊格式,可以用@JsonFormat定制:
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
//还可以这样
@JsonSerialize(using = DateToStringSerializer.class)
public class DateToStringSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException {
if (date != null) {
jsonGenerator.writeString(DateUtil.format(date,DateUtil.FORMAT_YMDHMS));
} else {
jsonGenerator.writeNull();
}
}
}
- 2.Long统一转String返回
@Configuration
public class WebConfigure implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
//不显示为null的字段
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
//放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
}
// 或者可以这样
@JsonSerialize(using = LongToStringSerializer.class)
public class LongToStringSerializer extends JsonSerializer<Long> {
@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value != null) {
gen.writeString(value.toString());
} else {
gen.writeNull();
}
}
}
server {
listen 80 default_server;
server_name _;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin $http_origin;
location /file {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Methods $http_access_control_request_method;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
add_header Access-Control-Max-Age 1728000;
return 204;
}
}
}
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); //支持cookie 跨域
config.setAllowedOrigins(Arrays.asList("*"));
config.setAllowedHeaders(Arrays.asList("*"));
config.setAllowedMethods(Arrays.asList("*"));
config.setMaxAge(300L);//设置时间有效
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- 1.基于tag创建新分支
git branch sprint-xjs-temp(新分支) sprint-da75a44-20201201164256(已有tag)#创建新分支
git checkout sprint-xjs-temp # 切换到新分支
git push origin sprint-xjs-temp # 提交到服务端
- 2.基于commit创建新分支
git show f58e0955 # 查找完整的cimmit id
git checkout -b temp_xiaoye_210618 f58e0955d9097738d2c26a73be26880a223dc114 # 创建新分支
git push origin temp_xiaoye_210618 # 提交到服务端
- 3.分支merge,develop分支merge到master
git checkout master #切换到master
git merge origin/develop # meger develop
git push origin master # 提交到master
- 4.删除分支dev_old
git checkout dev_new # 切换到北的分支
git brand -d dev_old # 本地删除分支
git brand -D dev_old # 强制删除本地分支
git push origin --delete dev_old # 远程删除
- 1.进入网卡配置目录
[root@sc-chenlu ~]# cd /etc/sysconfig/network-scripts/
- 2.编辑ifcfg-enxxx网卡的配置文件
vi ifcfg-eno16777736
修改:BOOTPROTO=none #none手工指定ip,dhcp 表示虚拟机动态获得ip地址
添加:IPADDR=192.168.136.135 #IPADDR指定具体的ip地址
- 3.重新启动网络服务使修改生效
service network restart