通过Docker辅助开发
什么是容器
认识Docker
不同眼人眼中的Docker
开发眼中的Dorcker
- 简化了重复搭建开发环境的工作
运维眼中的Docker
- 交付系统更为流程
- 伸缩性更好
Docker常用命令
镜像生成
- docker pull
- docker search
容器相关
- docker run
- docker start/stop <容器名>
- docker ps <容器名>
- docker logs <容器名>
docker run的常用选项
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
选项说明
- -d,后台运行容器
- -e,设置环境变量
- –expose / -p 宿主端口:容器端口
- –name,指定容器名称
- –link,链接不同容器
- -v 宿主目录:容器目录,挂载磁盘卷
国内Docker 镜像配置
官方Docker Hub
- https://hub.docker.com
官方镜像
- 镜像 https://www.docker-cn.com/registry-mirror
- 下载 https://www.docker-cn.com/get-docker
阿里云镜像
- https://dev.aliyun.com
通过 Docker 启动 MongoDB
官方指引
- https://hub.docker.com/_/mongo
获取镜像
- docker pull mongo
运行MongoDB镜像 - docker run --name mongo -p 27017:27017 -v ~/docker-data/mongo:/data/db -e MONGO_INITDB_USERNAME=admin
- -e MONGO_INITDB_ROOT_PASSWORD=admin -d mongo
通过Docker启动 MongoDB
登录到MongoDB 容器中
- docker exec -it mongo bash
通过Shell 连接MongoDB
- mongo -u admin -p admin
在 Spring 中访问 MongoDB
Spring 对 MongoDB 的⽀持
MongoDB是一款开源的文档型数据库
- https://www.monoggodb.com
Spring对MongoDB的支持
- Spring Data MongoDB
- MongoTemplate
- Repository 支持
Spring Data MongoDB的基本用法
注解
- @Document
- @Id
MongoTemplate
- save / remove
- Criteria / Query / Updte
初始化MongoDB的库及权限
创建库
use springbucks
创建用户
db.createUser(
{
user: "springbucks",
pws: "springbucks",
roles: [
{ role:"readWrite",db: "springbucks"}
]
}
)
Spring Data MongoDB的Repository
@EnableMongoRepository
对应接口
- MongoRepository<T,ID>
- PagingAndSorting<T,ID>
- CrudRepository<T,ID>
实例代码
@Document
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
public class Coffee {
@Id
private String id;
private String name;
private Money price;
private Date createTime;
private Date updateTime;
}
public class MoneyReadConverter implements Converter<Document,Money> {
@Override
public Money convert(Document source) {
Document money = (Document) source.get("money");
double amount = Double.parseDouble(money.getString("amount"));
String currency = ((Document)money.get("currency")).getString("code");
return Money.of(CurrencyUnit.of(currency),amount);
}
}
@SpringBootApplication
@Slf4j
@EnableMongoRepositories
public class TestmongodbApplication implements ApplicationRunner {
@Autowired
private MongoTemplate mongoTemplate;
public static void main(String[] args) {
SpringApplication.run(TestmongodbApplication.class, args);
}
@Bean
public MongoCustomConversions mongoCustomConversions() {
return new MongoCustomConversions(Arrays.asList(new MoneyReadConverter()));
}
@Override
public void run(ApplicationArguments args) throws Exception {
Coffee espresso = Coffee.builder()
.name("espresso")
.price(Money.of(CurrencyUnit.of("CNY"), 20.0))
.createTime(new Date())
.updateTime(new Date()).build();
Coffee saved = mongoTemplate.save(espresso);
log.info("Coffee{}", saved);
List<Coffee> list = mongoTemplate.find(
Query.query(Criteria.where("name").is("espresso")), Coffee.class
);
list.forEach(c -> log.info("Coffee {}", c));
Thread.sleep(1000);
UpdateResult result = mongoTemplate.updateFirst(
Query.query(Criteria.where("name").is("espre sso")),
new Update().set("price", Money.ofMajor(CurrencyUnit.of("CNY"), 30)).currentDate("updateTime"),
Coffee.class);
log.info("Update Result:{}",result.getModifiedCount());
Coffee updateOne = mongoTemplate.findById(saved.getId(), Coffee.class);
log.info("Update Result: {}", updateOne);
mongoTemplate.remove(updateOne);
}
}
连接数据库地址
spring.data.mongodb.uri=mongodb://springbucks:springbucks@localhost:27017/springbucks