Micronaut是一个基于JVM的开源框架,用于构建全栈,模块化,易于测试的微服务和无服务器应用程序。
与基于反射的IoC框架使用Micronaut为代码中的每个字段,方法和构造函数加载和缓存反射数据不同,使用Micronaut,您的应用程序启动时间和内存消耗不受代码库大小的限制。内置了Micronaut的云支持,包括对常见发现服务,分布式跟踪工具和云运行时的支持。
这个在云中的Micronaut教程中,我们将使用MongoDB数据库部署应用程序。
第一步是创建应用程序本身,Micronaut拥有适当的文档。您具有开始代码链接,您可以在其中定义编写应用程序所需的依赖项。在这一点上,我们需要MongoDB同步依赖项。
如果您想在本地运行MongoDB,一个不错的选择可能是Docker,您可以使用以下命令运行它:
docker run -d --name mongodb-instance -p 27017:27017 mongo
第一步是设置数据库配置。我们需要将应用程序配置为在本地运行,并使其能够覆盖生产环境。
micronaut: application: name: mongodb mongodb.uri: ${MONGO_URL:`mongodb://localhost:27017/database`}
基础结构代码已准备就绪;下一步是创建应用程序本身。在此示例中,我们将创建一个小的rest应用程序来存储人员。因此,我们将创建一个Person实体。
import io.micronaut.core.annotation.Introspected; import javax.validation.constraints.NotBlank; @Introspected public class Person { @NotBlank private String name; @NotBlank private String city; @NotBlank private String country; //getter and setter }
最后一步是创建一个资源,客户端可以在其中进行请求,然后再进行CRUD。
import com.mongodb.client.FindIterable; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.model.Filters; import io.micronaut.http.HttpResponse; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Delete; import io.micronaut.http.annotation.Get; import io.micronaut.http.annotation.Post; import org.bson.conversions.Bson; import javax.validation.Valid; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @Controller("/people") public class PersonController { private final MongoClient mongoClient; public PersonController(MongoClient mongoClient) { this.mongoClient = mongoClient; } @Get("/{name}") public Person show(String name) { Bson filter = Filters.eq("name", name); return getCollection().find(filter).first(); } @Get public Iterable<Person> findAll() { final FindIterable<Person> iterable = getCollection().find(); return StreamSupport.stream(iterable.spliterator(), false) .collect(Collectors.toList()); } @Post public HttpResponse<Person> save(@Body @Valid Person person) { getCollection().insertOne(person); return HttpResponse.created(person); } @Delete("/{name}") public HttpResponse delete(String name) { Bson filter = Filters.eq("name", name); getCollection().deleteOne(filter); return HttpResponse.noContent(); } private MongoCollection<Person> getCollection() { return mongoClient .getDatabase("main") .getCollection("people", Person.class); } }
该应用程序已准备就绪,可以运行该应用程序的测试。下一步是使用Platform.sh迁移到云中。
要将您的应用程序移动到云中,简要地说,您需要三个文件:
"https://{default}/": type: upstream upstream: "app:http" "https://www.{default}/": type: redirect to: "https://{default}/"
Platform.sh允许您完全定义和配置要在项目上使用的拓扑和服务。
mongodb: type: mongodb:3.6 disk: 1024
一个容器(.platform.app.yaml)。您可以通过一个配置文件控制应用程序以及在Platform.sh上构建和部署应用程序的方式。在此应用程序上,我们允许PostgreSQL数据库与应用程序之间的关系。因此,我们的应用程序容器将有权查看PostgreSQL容器。此外,我们还将覆盖要在云中使用的本地配置覆盖到Platform.sh。
name: app type: "java:11" disk: 1024 hooks: build: mvn clean package -DskipTests relationships: mongodb: 'mongodb:mongodb' web: commands: start: java -jar $JAVA_OPTS target/mongodb-0.1.jar
为了简化应用程序文件,我们将在 文件中使用Shell变量.environment。
export MONGO_PORT=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].port"` export MONGO_HOST=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].host"` export MONGO_PASSWORD=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].password"` export MONGO_USER=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].username"` export MONGO_DATABASE=`echo $PLATFORM_RELATIONSHIPS|base64 -d|json_pp|jq -r ".mongodb[0].path"` export MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASSWORD}@${MONGO_HOST}:${MONGO_PORT}/${MONGO_DATABASE} export JAVA_MEMORY=-Xmx$(jq .info.limits.memory /run/config.json)m export JAVA_OPTS="$JAVA_MEMORY -XX:+ExitOnOutOfMemoryError"
现在该应用程序已准备就绪,是时候使用以下步骤通过Platform.sh将其移动到云中了:
原文链接:http://codingdict.com