Sean's Blog


  • Home

  • Tags

  • Categories

  • Archives

  • Search

CentOS7安装Java

Posted on 2019-08-06 | In linux环境配置

下载Java

  1. 访问 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  2. 点击 Downloads , Accept License Agreement

  3. 选择 Linux x64 , jdk-***-x64.tar.gz

  4. 下载途中暂停, 复制下载链接。

安装Java

创建目录

1
2
3
cd /usr/local
mkdir Java
cd Java

此时将刚才的链接 wget 到Linux服务器上。

解压文件

1
tar -zxvf jdk-\*\*\*-x64.tar.gz

重命名目录

1
mv jdk1.8.0_171 jdk1.8

配置环境变量

添加系统环境变量

1
vim /etc/profile

添加

1
2
3
4
5
JAVA_HOME=/usr/local/java/jdk1.8
JRE_HOME=/usr/local/java/jdk1.8/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

读取新的配置

1
source /etc/profile

查看java版本

1
java -version

修改MySQL默认密码策略

Posted on 2019-08-06 | In linux环境配置

修改密码策略

validate_password_policy

控制validate_password验证策略
0: LOW 1: MEDIUM 2:STRONG

1
SET GLOBAL validate_password_policy = 0;

validate_password_length

密码长度的最小值(这个值最小是4)

1
SET GLOBAL validate_password_length = 6;

validate_password_number_count

密码中数字的最小个数

1
SET GLOBAL validate_password_number_count = 0;

validate_password_mixed_case_count

密码中大小写的最小个数

1
SET GLOBAL validate_password_mixed_case_count = 0;

validate_password_special_char_count

密码中特殊字符的最小个数

1
SET validate_password_special_char_count = 0;

validate_password_dictionary_file

字典文件

策略解释

LOW

校验级别最低,只校验密码长度,只要长度跟validate_password_length一样即可,默认长度是8位。

MEDIUM

除了校验LOW的内容,还要校验数字个数,大小写个数,特殊字符个数。

STRONG

除了校验MEDIUM的内容,还要校验密码中任意连续4个或以上的字符不得是字典中的单词。

Centos7 安装MySQL

Posted on 2019-08-06 | In linux环境配置

下载MySQL源安装包

1
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

安装MySQL源

1
yum localinstall mysql57-community-release-el7-8.noarch.rpm

检查MySQL源是否安装成功

1
yum repolist enabled | grep "mysql.*-community.*"

修改源,改变默认安装的MySQL版本

1
vim /etc/yum.repos.d/mysql-community.repo

如果要使用5.6,就将5.6下方的 enabled=1 ,其他的设为 enabled=0 。

安装MySQL

1
yum install mysql-community-server

启动MySQL服务

1
systemctl start mysqld

开机启动

1
2
systemctl enable mysqld
systemctl daemon-reload

修改本地登录密码

查看MySQL密码

1
grep 'temporary password' /var/log/mysqld.log

连接MySQL

1
mysql -uroot -p

修改密码

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass1!';

或

1
SET PASSWORD FOR 'root'@'localhost'=password('MyNewPass1!');

或 5.7以上的版本使用:

1
update mysql.user set authentication_string=password('MyNewPass1!')where user='root' ;

检查密码

1
SHOW VARIABLES LIKE '%password%';

添加远程登录用户

1
GRANT ALL PRIVILEGES ON *.* TO 'REMOTE_USER'@'%' IDENTIFIED BY 'MyNewPassword2!' WITH GRANT OPTION;

项目搭建[3]springBoot引入Mybatis

Posted on 2019-07-25 | In 项目搭建

Mybatis引入

pom文件配置

在dependencies节点下引入Mybatis的引用

1
2
3
4
5
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>

application.yaml配置

application.yaml下增加如下配置,classpath是resources目录下的相对路径。type-aliases-package

1
2
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml

Application增加扫描

在Application入口类中增加注解@MapperScan,指向mapper文件的路径

1
2
3
4
5
6
7
8
@MapperScan("com.example.mapper")
@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

新增PO类

1
2
3
4
5
6
@Data
public class UserPO {
private Integer id;
private String username;
private String password;
}

新增Mapper类

1
2
3
4
@Mapper
public interface UserMapper {
UserPO findById(int id);
}

新增Mapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

<resultMap id="BaseResultMap" type="com.example.po.UserPO">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="password" jdbcType="VARCHAR" property="password" />
</resultMap>

<select id="findById" resultType="com.example.po.UserPO">
select * from user where id = #{id}
</select>

</mapper>

项目搭建[2]springboot的mysql的配置及JPA的使用

Posted on 2019-07-23 | In 项目搭建

mysql的配置

首先在maven中引入依赖:

1
2
3
4
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

然后在配置文件中配置:

1
2
3
4
5
6
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://127.0.0.1/database_name?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

JPA的使用

基础配置使用

首先在maven中引入依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

然后在配置文件中设置(打印sql):

1
2
jpa:
show-sql: true

新建entity包并创建文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
@ToString
@Entity
@DynamicUpdate
public class ProductCategory {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer categoryId;

private String categoryName;

private Integer categoryType;
}

如果类名和表名的关系不是驼峰转下划线的关系的话,我们可以使用@Table注解来配置表名:

1
2
3
4
@Table(name = "t_product_category")
public class ProductCategory {
...
}

新建repository包并创建Repository接口:

1
2
3
4
public interface ProductCategoryRepository extends JpaRepository<ProductCategory, Integer> {

List<ProductCategory> findByCategoryTypeIn(List<Integer> categoryTypeList);
}

DynamicUpdate注解说明

在实际业务场景中,我们经常会从数据库中查出一条数据,对其做一些修改后再更新数据库,如果我们更新时将原来的update_time传入,就会使数据库默认的update_time失效。
这时我们可以为entity类加上DynamicUpdate注解自动更新数据库时间。

1
2
3
4
5
@Entity
@DynamicUpdate
public class ProductCategory {
...
}

测试方法

我们可以写一个测试类来测试表的增删改查:

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
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductCategoryTest {

@Autowired
private ProductCategoryRepository repository;

@Test
public void findOneTest() {
ProductCategory one = repository.findById(1).orElse(null);
Assert.assertNotNull(one);
}

@Test
public void saveTest() {
ProductCategory productCategory = new ProductCategory();
productCategory.setCategoryName("女生最爱");
productCategory.setCategoryType(3);
repository.save(productCategory);
}

@Test
public void updateTest() {
ProductCategory productCategory = new ProductCategory();
productCategory.setCategoryId(2);
productCategory.setCategoryName("男生最爱");
productCategory.setCategoryType(3);
repository.save(productCategory);
}

@Test
public void findByCategoryTypeInList() {
List<Integer> list = Arrays.asList(2, 3, 4);
List<ProductCategory> productCategories = repository.findByCategoryTypeIn(list);
Assert.assertNotEquals(productCategories.size(), 0);
}
}

常见错误

如果编辑器报错:

1
Inferred type 'S' for type parameter 'S' is not within its bound;

这是由于使用SpringBoot是2版本但直接调用了find方法如下:

1
ProductCategory one = repository.findById(1);

这在SpringBoot 2.X中已经不允许了。

  1. 将版本换回1.5.4。

  2. 写成以下形式:

1
ProductCategory one = repository.findById(1).orElse(null);

如果编辑器报错:

1
Table 'sell.hibernate_sequence' doesn't exist

如果我们使用以下写法就会报错,这也是因为SpringBoot2.X使用了hibernate5导致的。

1
@GeneratedValue
  1. 版本切换

  2. 写成如下形式:

1
@GeneratedValue(strategy = GenerationType.IDENTITY)

项目搭建[1]logback的使用与配置

Posted on 2019-07-10 | In 项目搭建

日志框架的作用

  • 定制输出目标
    可以选择输出到控制台或文件等
  • 定制输出格式
    可以为输出内容配置公用的格式
  • 携带上下文信息
    可以携带类信息,时间信息等上下文信息
  • 运行时选择性输出
    可以只输出部分等级,部分类的日志
  • 灵活的配置
    可以选择按天滚动等
  • 优异的性能
    System.out.println会添加synchronized方法锁,会极大地影响系统性能

logback所需jar包

springboot在spring-boot-starter-web中内嵌了logback的模块,所以不用额外引用包.若不使用springboot,需要导入如下两个包:

  1. logback-core-xxx.jar

  2. logback-classic-xxx.jar

包的依赖关系可以使用如下指令来查看:

1
mvn dependency:tree

Spring Test中使用Logback

普通引入:

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {

private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

@Test
public void test1() {
logger.debug("debug..."); // 系统默认的日志级别是info.这里不会打印
logger.info("info...");
logger.error("error...");
}
}

lombok简化引入:

1
2
3
4
5
6
7
8
9
10
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1() {
log.debug("debug...");
log.info("info...");
}
}

使用配置文件

在resources目录下新建logback-spring.xml就可以对日志进行配置了。日志基本内容如下:

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
51
52
53
54
<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
<!-- 控制台输出 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%c %M %L: %m%n
</pattern>
</layout>
</appender>
<!-- INFO及WARN等级输出 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 表示忽略ERROR等级的输出 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略(按时间滚动,默认按天滚动)-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出路径-->
<fileNamePattern>./log/info-%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- ERROR等级输出 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 表示输出ERROR等级及以上的日志文件 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>./log/error-%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- -->
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>

常用pattern说明

pattern 意义
%d{pattern} 日期
%m 或 %msg 信息
%c{length} logger名,默认输出全路径,当length大于路径长度输出全路径,length为0只输出类名,否则输出路径首字母及类名
%M method
%L 行号
%thread 线程名称
%-5level 等级
%n 换行
1…45

Sean

46 posts
10 categories
18 tags
© 2019 Sean
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4