一群热爱技术并且向往优秀的程序猿同学,不喜欢水文,不喜欢贩卖焦虑,只喜欢谈技术,分享的都是技术干货。Talk is cheap. Show me the code
Spring Boot 20天入门(day6)
Docker
1、什么是Docker
Docker是一个开源的应用容器引擎,属于Linux容器的一种封装,提供简单易用的容器使用接口。他是目前最流行的Linux容器解决方案。
2、Docker的用途
1)、提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
2)、提供弹性的云服务。因为Docker容器可以随开随关,适合动态扩容和缩容
3)、组件微服务架构。通过多个容器,一台集器可以到多个服务,在本机就可以模拟出微服务架构。
3、Docker安装
官网有详细的文档一步一步教你安装,在安装之前,请先保证你的系统内核要是比较高的版本(比如centos7以上,ubuntu16以上),否则是无法安装的,博主被坑过一次。
也可以参考这篇文章
4、image文件
Docker把应用程序以及依赖,都打包在imae文件里面。
通过这个文件,才能生成Docker容器,个人是把他理解成一个容器工厂,每次需要创建容器都由这个工厂来生产。
同一个image文件,可以同时生成多个可运行的容器。
5、Docker常用命令
查询
如果我们想要创建一个Tomcat的容器,我们得先知道这个容器的依赖存不存在,在命令行执行查询命令
# 在docker 远程仓库(docker hub)中搜索关于tomcat的依赖
docker search tomcat
从左到右依次是:
依赖的名称,是否是官方的(OFFICIAL表示是官方的),描述,关注的热度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffbYp6qa-1590045198685)(G:\java文档\dockersearch.png)]
也可以直接去docker hub上搜索,也是一样的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4dWflc0o-1590045198688)(G:\java文档\image\dockerhub.png)]
网址在这里:
友情提示:科学上网比较快噢
拉取
搜索到对应的依赖后呢,我们就要将依赖下载到image文件夹里面,在命令行执行命令:
docker pull tomcat
如果你想指定版本号添加,那么就在后面加上版本号,前提是docker hub中有这个一个版本依赖存在
# 下面以tomcat5.5为例
docker pull tomcat:5.5
创建并运行容器
下载完依赖之后,我们就可以创建容器并运行了,在命令行执行命令:
# 新建一个容器,取名为tomcat01,并在后台运行
docker run --name tomcat01 -d tomcat
使用 docker ps命令查看正在后台运行的容器
也可以使用 docker ps -a查看所有已经创建的容器
当我们也可以将主机的默认端口映射给容器的一个端口,在命令行中执行命令:
docker run -p 映射端口:8080(主机端口,tomcat的默认端口) --name tomcat01 -d tomcat
停止或重新运行容器
我们如果想要关闭一个正在运行中的容器,在命令行执行命令:
# 这个clientId是运行中的容器的id,可以用docker ps查看
docker stop cilentId
然后如果我们想要重新运行这个容器,在命令行执行命令:
docker start clintId
删除容器或删除镜像
如果我们不想要一个镜像怎么办?在命令行执行命令:
# iamgeId可以通过docker images查看
docker rmi imageId
如果我们不想要一个容器怎么办?在命令行执行命令:
docker rm clientId
查看容器日志
如果一个容器异常报错,崩溃退出了怎么办,我们可以查看容器的日志来进行问题的排查,在命令行执行命令:
docker log clintId
Springboot与数据访问
JDBC
引入相关依赖:
<dependency>
<artifactId>spring-boot-starter-jdbc</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
<dependency>
<groupId>MySQL</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
数据源配置:
spring:
datasource:
username: root
url: jdbc:mysql://localhost:3306/jdbc1?serverTimezone=UTC # mysql8.0以上需要配置时区
driver-class-name: com.mysql.cj.jdbc.Driver
password: 8761797
效果:
Springboot2.x默认是hikari
作为数据源,Springboot2.x以前默认是tomcat jdbc
作为数据源
Springboot整合Druid数据源
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
指定数据源类型
spring:
datasource:
username: root
url: jdbc:mysql://localhost:3306/jdbc1?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
password: 8761797
type: com.alibaba.druid.pool.DruidDataSource
配置数据源:
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
//配置Druid的监控
//1、配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean<StatViewServlet> statView(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","root");
initParams.put("loginPassword","8761797");
initParams.put("allow","localhost");//默认允许所有
initParams.put("deny","192.168.15.21");
bean.setInitParameters(initParams);
return bean;
}
//2、配置一个监控的filter
public FilterRegistrationBean<WebStatFilter> webStatFilter(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Collections.singletonList("/*"));
return bean;
}
}
Springboot整合Mybatis
引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
注解版
编写实体类
import java.io.Serializable;
/**
* @Description : TODO
* @Author : Weleness
* @Date : 2020/05/21
*/
public class User implements Serializable {
private static final long serialVersionUID = 7820095111430235961L;
private int id;
private String username;
private String password;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
数据库映射:
public interface UserMapper {
@Select("SELECT * FROM user")
public List<User> findAll();
}
自定义mybatis配置规则:
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
一次性为数据库映射添加@mapper
注解:
// 扫描指定的包,把包下的所有类作为数据库映射类,为他们添加@mapper注解
@MapperScan(basePackages = "com.github.springdatajdbc.mapper")
@SpringBootApplication
public class SpringdatajdbcApplication {
public static void main(String[] args) {
SpringApplication.run(SpringdatajdbcApplication.class, args);
}
}
测试:
获取成功
配置文件版(xml)
创建数据库的映射xml文件
<?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.github.springdatajdbc.mapper.UserMapper">
<select id="findAll" resultType="com.github.springdatajdbc.model">
SELECT * FROM user;
</select>
</mapper>
主配置文件:
这里面可以写一些其他的配置,比如开启缓存,绑定mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTO Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
在配置文件中指定位置:
mybatis:
config-location: classpath:mybatis-config.xml
mapper-locations: classpath:*.xml
以上…