git remote set-url origin git地址
谷歌 时间排序
在Google搜索地址栏的最后加上 &as_qdr=d. 然后回车
Logback configuration error detected
原因: spring-boot-starter-web包的时候他里面默认使用了logback日志,这样就会产生日志包的冲突,其实不只是starter-web包默认引入的logback还有很多的包默认引入的logback包
解决: 需要把 spring-boot-starter-web 放到pom文件中依赖的第一位,在向下执行的时候也会排除所有的默认logger了 。
A generic error occurred in GDI+
- 因为 .net GDI+ 是对底层 的封装。 所以可以尝试用 Marshal.GetLastWin32Error();函数获得底层错误代码
try{
image.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
}
catch (Exception exp)
{
var code = Marshal.GetLastWin32Error();
throw new Exception(exp.Message + ":" + code.ToString(), exp);
}
2. 查看错误代码含义
ERROR_PATH_NOT_FOUND
3 (0x3)
The system cannot find the path specified.
原因:save的目录不存在。解决:手动或通过程序建save的目录。
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
原因: save的目录没有权限
解决: 查看目录的权限
ERROR_SHARING_VIOLATION32 (0x20)
The process cannot access the file because it is being used by another process.
原因:
从一个文件构造的Bitmap 对象或一个 Image 对象, 在该对象的生存期内该文件处于锁定状态。 因此, 在没有释放这个Image或Bitmap对象前,无法更改图像并将其保存回原文件。
解决方法:
解决:
构造一个新的Image对象,然后把原来的Image对象中的图象通过Graphics的DrawImage()方法,拷贝到新Image对象中,最后通过Dispose()方法释放原来的Image对象:
Image image = new Bitmap ( openFileDialog1 . FileName );
//新建第二个Image类型的变量newImage,这里是根据程序需要设置自己设置。
Image newImage = new Bitmap ( 800 , 600 );
//将第一个bmp拷贝到bmp2中
Graphics draw = Graphics . FromImage ( newImage);
draw . DrawImage ( image , 0 , 0 );
//释放第一个Image对象
image.Dispose();
3.其他问题
a. Image 对应的Stream被Dispose了。
b. 保存成png时报错。
maven发布的项目打包jsp
从eslipse迁移的Web项目的jsp、js、css等文件都是放到WebContent里,而Maven中,这些文件是放到webapp下的。所以,如果你直接用Maven进行install也就是打包的时候,你的页面相关的文件不会被打包进去,你会发现打好的war包里只有src下的.class文件和一些配置文件。那么如何将页面等文件也包含进去呢?
<build>
<finalName>projectName</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<!--指定web.xml文件的位置-->
<webXml>WebContent/WEB-INF/web.xml</webXml>
<!--指定jsp等文件所在位置-->
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
批量 修改 数据库的字符集和排序规则
-- 字符集为utf8mb4,排序规则为utf8mb4_unicode_ci
-- 修改数据库
ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 设置每张表的字符集和排序规则为为 utf8mb4、utf8mb4_unicode_ci
SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '数据库名';
-- 批量修改字符编码和排序编码
select concat('ALTER TABLE `', table_name, '` MODIFY `', column_name, '`', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH,
') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', ';')
FROM information_schema.COLUMNS
WHERE table_schema = '数据库名'
AND DATA_TYPE IN ('varchar' ,'char');
validatorUtil 工具类校验fastjson转对象的参数
- 工具类
import org.hibernate.validator.HibernateValidator;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import javax.validation.Validation;
import java.util.Set;
public class ValidatorUtil {
/**
* 开启快速结束模式 failFast (true)
*/
private static final Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
/**
* 校验对象
*
* @param t bean
* @param groups 校验组
* @return ValidResult
*/
public static <T> ValidResult validateBean(T t, Class<?>...groups) {
ValidResult result = new ValidResult();
Set<ConstraintViolation<T>> violationSet = validator.validate(t,groups);
boolean hasError = violationSet != null && violationSet.size() > 0;
result.setHasErrors(hasError);
if (hasError) {
for (ConstraintViolation<T> violation : violationSet) {
result.addError(violation.getPropertyPath().toString(), violation.getMessage());
}
}
return result;
}
/**
* 校验bean的某一个属性
*
* @param obj bean
* @param propertyName 属性名称
* @return ValidResult
*/
public static <T> ValidResult validateProperty(T obj, String propertyName) {
ValidResult result = new ValidResult();
Set<ConstraintViolation<T>> violationSet = validator.validateProperty(obj, propertyName);
boolean hasError = violationSet != null && violationSet.size() > 0;
result.setHasErrors(hasError);
if (hasError) {
for (ConstraintViolation<T> violation : violationSet) {
result.addError(propertyName, violation.getMessage());
}
}
return result;
}
}
2. ValidResult 校验结果类
import java.util.ArrayList;
import java.util.List;
public class ValidResult {
/**
* 是否有错误
*/
private boolean hasErrors;
/**
* 错误信息
*/
private final List<ValidErrorMessage> errors;
public ValidResult() {
this.errors = new ArrayList<>();
}
public boolean hasErrors() {
return hasErrors;
}
public void setHasErrors(boolean hasErrors) {
this.hasErrors = hasErrors;
}
/**
* 获取所有验证信息
* @return 集合形式
*/
public List<ValidErrorMessage> getAllErrors() {
return errors;
}
/**
* 获取所有验证信息
* @return 字符串形式
*/
public String getErrors(){
StringBuilder sb = new StringBuilder();
for (ValidErrorMessage error : errors) {
sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" ");
}
return sb.toString();
}
public void addError(String propertyName, String message) {
this.errors.add(new ValidErrorMessage(propertyName, message));
}
}
3. 错误类
public class ValidErrorMessage {
private String propertyPath;
private String message;
public String getPropertyPath() {
return propertyPath;
}
public void setPropertyPath(String propertyPath) {
this.propertyPath = propertyPath;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ValidErrorMessage() {
}
public ValidErrorMessage(String propertyPath, String message) {
this.propertyPath = propertyPath;
this.message = message;
}
}
4. 校验类
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
public class CheckDataUpdateTimeJson {
@NotBlank(message = "token不能为空!")
private String token;
public void setToken(String token) {
this.token = token;
}
public String getToken() {
return token;
}
}
5. 使用
String requestJson = HelperUtils.convertStreamToString(request.getInputStream());
CheckDataUpdateTimeJson paramJson = JSON.parseObject(requestJson, CheckDataUpdateTimeJson.class);
ValidResult validResult = ValidatorUtil.validateBean(paramJson);
if (validResult.hasErrors()) {
System.out.println(validResult.getErrors());
}
Spring 添加 Hibernate Validator支持 Add a provider like Hibernate Validator (RI) to your classpath
- 添加依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.2.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>6.1.2.Final</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0.1</version>
<scope>provided</scope>
</dependency>
2. 向容器里注册一个处理器:
@Configuration
@EnableWebMvc
public class WebRootConfig {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
3. 增加验证类
public class AppLoginParam {
@NotNull(message = "userName不能为空")
private String userName;
@NotNull(message = "password不能为空")
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4. Controller增加验证
@RequestMapping("/login")
@ResponseBody
public AjaxJson login(@Valid @RequestBody AppLoginParam requestParam, BindingResult bindingResult) {
AjaxJson res = new AjaxJson();
Integer code = response.getStatus();
res.setCode(String.valueOf(code));
res.setStatus(false);
// validator 验证
if (bindingResult.hasErrors()) {
res.setMessage(bindingResult.getFieldError().getDefaultMessage());
return res;
}
// do something....
}
cannot read realtime clock: Invalid argument
wsl ubuntu 20.04出现此问题
解决方法:
sudo -i
sudo mv /bin/sleep /bin/sleep~ ; touch /bin/sleep ; chmod +x /bin/sleep
或者:
wget https://launchpad.net/~rafaeldtinoco/+archive/ubuntu/lp1871129/+files/libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb
sudo dpkg --install libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb
sudo apt-mark hold libc6
sudo apt --fix-broken install
sudo apt full-upgrade
windowns下 idea console tomcat 日志乱码
修改 tomcat 下的 logging.properties这个文件 为 GBK 就好了
#java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.encoding = GBK
