Slides usados disponíves no google docs e slides.com
Outros Links
Slides usados disponíves no google docs e slides.com
Outros Links
| take sample | |
| mkdir -p src/main/java | |
| touch src/main/java/Main.java | |
| touch build.gradle |
| public class Main { | |
| public static void main(String [] args){ | |
| System.out.println("Hello"); | |
| } | |
| } |
| apply plugin: "java" | |
| apply plugin: "application" | |
| mainClassName = "Main" | |
| jar { | |
| manifest { | |
| attributes("Main-Class": mainClassName) | |
| } | |
| } |
| mn create-app sample-mn --features groovy |
| package sample.mn | |
| import spock.lang.Specification | |
| import spock.lang.Unroll | |
| // http://spockframework.org | |
| class BasicSpock extends Specification { | |
| def "nice features"(){ | |
| given: | |
| def list = [1,2] | |
| when: | |
| list.add(3) | |
| then: | |
| // https://mrhaki.blogspot.com/2013/08/spocklight-using-old-method.html | |
| list.size() == old(list.size()) + 1 | |
| } | |
| // http://spockframework.org/spock/docs/1.3/data_driven_testing.html | |
| @Unroll | |
| def "#x + #y = #z"(){ | |
| when: | |
| def result = x + y | |
| then: | |
| z == result | |
| where: | |
| x | y | z | |
| 1 | 1 | 2 | |
| 1 | 2 | 3 | |
| 1 | 3 | 4 | |
| } | |
| } |
| package sample.mn | |
| import io.micronaut.http.annotation.Controller | |
| import io.micronaut.http.annotation.Get | |
| // https://guides.micronaut.io/micronaut-http-client-groovy/guide/index.html | |
| @Controller("/hello") | |
| class SampleController { | |
| @Get | |
| String sayHello(){ | |
| "Hello world" | |
| } | |
| } |
| package sample.mn | |
| import io.micronaut.http.annotation.Get | |
| import io.micronaut.http.client.annotation.Client | |
| import io.micronaut.retry.annotation.CircuitBreaker | |
| import io.micronaut.retry.annotation.Retryable | |
| import io.reactivex.Single | |
| // https://guides.micronaut.io/micronaut-http-client-groovy/guide/index.html | |
| //@CircuitBreaker | |
| @Client("https://pokeapi.co/api/v2") | |
| interface PokemonClient { | |
| @Get("/pokemon/{name}") | |
| Map getPokemon(String name) | |
| } |
| package sample.mn | |
| import io.micronaut.context.ApplicationContext | |
| import io.micronaut.runtime.server.EmbeddedServer | |
| import io.micronaut.test.annotation.MicronautTest | |
| import spock.lang.AutoCleanup | |
| import spock.lang.Shared; | |
| import spock.lang.Specification | |
| import javax.inject.Inject; | |
| @MicronautTest | |
| class PokemonClientSpec extends Specification { | |
| @Inject | |
| private PokemonClient client | |
| def "get pikachu"(){ | |
| when: | |
| def response = client.getPokemon("pikachu") | |
| println response | |
| then: | |
| response.name == "pikachu" | |
| } | |
| } |
| package sample.mn | |
| import io.micronaut.configuration.kafka.annotation.KafkaClient | |
| import io.micronaut.configuration.kafka.annotation.KafkaKey | |
| import io.micronaut.configuration.kafka.annotation.KafkaListener | |
| import io.micronaut.configuration.kafka.annotation.OffsetReset | |
| import io.micronaut.configuration.kafka.annotation.Topic | |
| import javax.inject.Inject | |
| // https://micronaut-projects.github.io/micronaut-kafka/latest/guide/ | |
| @KafkaClient | |
| interface ProductClient { | |
| @Topic("my-products") | |
| void sendProduct(@KafkaKey String brand, String name) | |
| } | |
| class KafkaService{ | |
| @Inject | |
| private ProductClient client | |
| void send(){ | |
| client.sendProduct("Nike", "Blue Trainers") | |
| } | |
| } | |
| @KafkaListener(offsetReset = OffsetReset.EARLIEST) | |
| class ProductListener { | |
| @Topic("my-products") | |
| void receive(@KafkaKey String brand, String name) { | |
| println "Got Product - ${name} by ${brand}" | |
| } | |
| } |
| # https://guides.micronaut.io/micronaut-creating-first-graal-app/guide/index.html | |
| mn create-app sample-graal --features=graal-native-image | |
| ./gradlew assemble | |
| ./docker-build.sh | |
| docker run -p 8080:8080 sample-graal | |
| # 03:42:29.075 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 110ms. Server Running: http://57ee6389bd17:8080 |