源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

在docker上安装运行mysql实例

  • 时间:2020-10-09 23:29 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:在docker上安装运行mysql实例
希望在自己的机器模拟一下公司中微服务的构建,使用docker部署了mysql实例,使用spring boot进行了CRUD(增删改查)操作进行了一下验证,在后面的学习中也可以尝试更多的框架和组件。 ps:实验环境是:ubuntu 14.04, 64位 [b]1.获取mysql镜像[/b] 从docker hub的仓库中拉取mysql镜像 [code]sudo docker pull mysql[/code] 查看镜像
sudo docker images

mysql latest 18f13d72f7f0 2 weeks ago 383.4 MB


[b]2.运行一个mysql容器[/b] 运行一个mysql实例的命令如下:
[url=http://spring.io/guides/gs/relational-data-access/]http://spring.io/guides/gs/relational-data-access/[/url] 使用java spring对数据库进行操作,使用了spring官网的例子,用JdbcTemplate这个裸写sql的方法,没有用hibernate或者myibatis. spring官网的例子使用h2一个内置的内存数据库,没有配置文件生成为对象的烦恼, 为了练习下yaml替代xml,使用了如下的mysql jdbc配置,application.yaml.
### application.yaml
### mysql config
spring:
 datasource:
  dbcp:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:mysql://192.168.18.129:3306/test1
   username: root
   password: 123456
找了半天自动将依赖注入为一个JdbcTemplate对象,也没有搞定,就只好像下面一样自己先生成DataSource,再new一个JdbcTemlate对象,最后使用jdbcTemplate对数据库进行操作,这样写的很丑,希望各位可以指点一下。
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dbcp")
public DataSource mysqlSource() { 
  return DataSourceBuilder.create().build();
}
@Bean
public JdbcTemplate mysqlJdbcTemplate() { 
  return new JdbcTemplate(mysqlSource());
}
下面是对数据库的一些CRUD操作,使用jdk8的函数式编程:
JdbcTemplate jdbcTemplate = mysqlJdbcTemplate();
jdbcTemplate.execute("DROP TABLE IF EXISTS customers");
jdbcTemplate.execute("CREATE TABLE customers(" + "id SERIAL, first_name VARCHAR(255), last_name VARCHAR(255))");
// Split up the array of whole names into an array of first/last names
List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long")
 .stream() .map(name -> name.split(" ")) .collect(Collectors.toList());
// Use a Java 8 stream to print out each tuple of the list
splitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));
// Uses JdbcTemplate's batchUpdate operation to bulk load data
jdbcTemplate.batchUpdate("INSERT INTO customers(first_name, last_name) VALUES (?,?)", splitUpNames);
log.info("Querying for customer records where first_name = 'Josh':");
jdbcTemplate.query( 
  "SELECT id, first_name, last_name FROM customers WHERE first_name = ?", 
  new Object[]{"Josh"}, (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name")))
  .forEach(customer -> log.info(customer.toString()));
下面在mysql的客户端进行了验证:
mysql> select * from customers;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | John    | Woo    |
| 2 | Jeff    | Dean   |
| 3 | Josh    | Bloch   |
| 4 | Josh    | Long   |
+----+------------+-----------+

4 rows in set (0.00 sec)

[b]5. 遇到的一些坑[/b] maven配置 使用了jdk8的lamda表达式,必须在maven中配置java.version
<properties> 
<java.version>1.8</java.version>
</properties>
docker服务重启 docker这个服务挂了,容器也就跟着挂了,并没有重启,应该在运行容器的时候带上--restart=always这个参数
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部