【5分钟系列】搭建基于docker环境搭建下springboot-mysql项目框架
????在云時(shí)代,開(kāi)發(fā)者創(chuàng)建的應(yīng)用必須要能很方便地在網(wǎng)絡(luò)上傳播,也就是說(shuō)應(yīng)用必須脫離底層物理硬件的顯示;同時(shí)必須是“任何時(shí)間任何地點(diǎn)”可獲取的。我們通常想要快速搭建一個(gè)項(xiàng)目框架,數(shù)據(jù)庫(kù)的環(huán)境搭建需要消耗一定的精力,為了與外界系統(tǒng)環(huán)境隔離,推薦使用docker可以使我們把更多精力放在業(yè)務(wù)處理上。
實(shí)驗(yàn)環(huán)境
- docker?17.12.0-ce?
- mysql鏡像版本 5.7
- jdk 1.8?
- springboot?2.1.4.RELEASE
- 開(kāi)發(fā)工具:IntelliJ IDEA
環(huán)境搭建
首先安裝好docker,安裝docker網(wǎng)上方法有很多,這里不再贅述。
搭建好docker環(huán)境之后,拉取mysql鏡像,如下:
??docker pull mysql:5.7如果不指定mysql版本,默認(rèn)將會(huì)拉取最新latest版本。查看mysql鏡像是否安裝成功:
docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 f6509bac4980 11 days ago 373MB運(yùn)行容器,這里設(shè)置端口映射,并設(shè)置mysql的初始密碼,默認(rèn)用戶名是root:
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7查看容器運(yùn)行狀態(tài):
docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e87ae06931c8 mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql容器運(yùn)行正常,進(jìn)入容器,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)test以及一張測(cè)試表tbl_test:
docker exec -it mysql /bin/bashroot@e87ae06931c8:/# mysql -uroot -p mysql> create database test; mysql> create table operatelog (id INT, userId varchar(255), operateDesc varchar(255));這樣mysql環(huán)境就搭建起來(lái)了。
實(shí)戰(zhàn)源碼
https://github.com/vincentduan/mavenProject?下面的springboot-mysql項(xiàng)目
實(shí)戰(zhàn)步驟梳理
本次實(shí)戰(zhàn)的步驟如下:
創(chuàng)建springboot工程
?用IntelliJ IDEA創(chuàng)建一個(gè)springboot的web工程springboot-mysql,pom.xml內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.vincent</groupId><artifactId>springboot-mysql</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.4.RELEASE</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.40</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.4.RELEASE</version><configuration><mainClass>cn.ac.iie.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins></build></project>創(chuàng)建Dao層
@Repository public class OperatelogDao {@Autowiredprivate JdbcTemplate jdbcTemplate;public void addOperatelog(int id) {String sql = "insert into operatelog (id) values (" + id + ")";jdbcTemplate.execute(sql);} }創(chuàng)建Service層的接口和實(shí)現(xiàn)
public interface OperatelogService {//測(cè)試簡(jiǎn)單插入一條數(shù)據(jù)void insert(int id); }對(duì)應(yīng)實(shí)現(xiàn)類,如下所示:
@Service public class OperatelogServiceImpl implements OperatelogService {@AutowiredOperatelogDao operatelogDao;public void insert(int id) {operatelogDao.addOperatelog(id);} }這個(gè)方法做的事情很簡(jiǎn)單:插入一條數(shù)據(jù)
mysql連接池配置
在application.properties中添加配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://docker所在服務(wù)器的IP地址:3306/test spring.datasource.username=root spring.datasource.password=123456配置連接池,新建配置類,將配置文件中的屬性裝配到連接池中,如下所示:
@SpringBootConfiguration public class DBConfiguration {@Autowiredprivate Environment environment;@Beanpublic DataSource createDataSource() {DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setUrl(environment.getProperty("spring.datasource.url"));druidDataSource.setUsername(environment.getProperty("spring.datasource.username"));druidDataSource.setPassword(environment.getProperty("spring.datasource.password"));druidDataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));return druidDataSource;} }創(chuàng)建controller
創(chuàng)建一個(gè)controller為OperatelogController,里面定義一個(gè)http接口,做的事情是調(diào)用Service層的服務(wù),如下:
@RestController @RequestMapping("operatelog") public class OperatelogController {@AutowiredOperatelogService operatelogService;@GetMapping("insert")public String insert(@RequestParam("id") int id) {operatelogService.queryOperateDesc();return "SUCCESS";} }驗(yàn)證效果
另外?
如果想將當(dāng)前springboot也放入到docker容器中運(yùn)行,也可以將當(dāng)前項(xiàng)目打包成jar,并上傳到服務(wù)器中,新建一個(gè)目錄,然后新建Dockerfile文件
Dockerfile內(nèi)容如下:
FROM java:8-alpine ADD test-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]在當(dāng)前目錄下,構(gòu)建鏡像,然后運(yùn)行:
docker build -t . docker run -d -p 8088:8080 test?
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【5分钟系列】搭建基于docker环境搭建下springboot-mysql项目框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Springboot线程池的使用和扩展
- 下一篇: Mesos介绍