Arquivo

Arquivo da Categoria ‘Springframework’

Spring Boot – Persistindo dados

22, dezembro, 2014 Sem comentários

Hoje mostrarei um exemplo de como gerenciar informações em bancos de dados.
Antes de mais nada atualize seu Spring Boot CLI (hoje a versão 1.2).


gvm i springboot

crie um novo projeto com o auxilio do Spring Boot CLI


spring init --packageName=br.com.dados --type=gradle-project --dependencies=web,data-jpa dadosProject

O comando


spring init --list

mostra todas as opções para esse comando.

Certifique-se de que seu arquivo build.gradle se parece com esse:


buildscript {
    ext {
        springBootVersion = '1.2.0.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot' 

jar {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
    mavenCentral()
}


dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    compile("org.hsqldb:hsqldb")
}

Crie um simples entity:


package demo.domain;

import ...

@Entity
public class Banco implements Serializable {
    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String codigo;

    @Column(nullable = false)
    private String nome;

    public Banco() {
        super();
    }

    public Banco(String codigo, String nome) {
        this.codigo = codigo;
        this.nome = nome;
    }

    ...
    

}

crie uma interface para o repositório


package demo.domain;

import org.springframework.data.repository.CrudRepository;

public interface BancoRepository extends CrudRepository {
    Banco findByCodigo(String codigo);
}

E por fim uma classe de testes:


package demo;

import ...

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class ApplicationTests {
    @Autowired
    private BancoRepository bancoRepository;

    @Test
    public void bancoTest() {

        // create
        Banco banco = new Banco("001", "Banco do Brasil SA");
        bancoRepository.save(banco);
        Assert.assertTrue("registros encontrados = 0", bancoRepository.count() > 0);

        // read
        Banco bancoSaved = bancoRepository.findByCodigo("001");
        Assert.assertNotNull("registros nao encontrado", bancoSaved);

        // update
        bancoSaved.setNome("Banco Brasileiro SA");
        bancoRepository.save(bancoSaved);
        Banco bancoUptodate = bancoRepository.findByCodigo("001");
        Assert.assertFalse("nome nao atualizado", bancoUptodate.getNome().equalsIgnoreCase("Banco do Brasil SA"));

        // delete
        bancoRepository.delete(bancoUptodate);
        Banco bancoDeleted = bancoRepository.findByCodigo("001");
        Assert.assertTrue("entity nao apagado", bancoDeleted == null);

    }

}

Execute o teste e verá que todos passaram.

Ao analizar o código, a primeira pergunta que surge é onde os dados foram persistidos? Qual DataSource foi usado?
Observe que adicionamos ao arquivo build.gradle a dependência do banco HyperSQL DataBase (hsqldb). Isso foi suficiente para que o Spring Boot criasse automaticamente um datasource em memória e disponibilizasse para que usássemos.

Isso é legal mas não parece muito útil. Edite o arquivo application.properties adicionando as linhas abaixo que farão com que o banco de dados seja gerenciado em arquivo.


spring.jpa.hibernate.ddl-auto=update

spring.datasource.url=jdbc:hsqldb:file:banco_db

ou essas para utilizar o MySQL:


spring.jpa.hibernate.ddl-auto=update

spring.datasource.url=jdbc:mysql://localhost:3306/banco_db
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

veja aqui mais opções de configuração para esse arquivo.

Categories: Spring Boot, Springframework Tags:

Spring Boot CLI

11, dezembro, 2014 Sem comentários

Hoje mostrarei a utilização básica do Spring Boot CLI.
O Spring Boot CLI é uma ferramenta de linha de comando que auxilia na criação rápida de artefatos Spring escritos em Groovy, facilitando assim a prototipação de suas aplicações.

Instalação

Você pode instala-lo a partir dos binários ou utilizar o GVM que é uma ferramenta multiplataforma utilizada pela comunidade Groovy para gerenciar a instalação de várias ferramentas. O GVM roda em plataformas Linux, Solaris, Mac OSX, BSD, porém no Windows apenas via Cygwin. Se você usa o Windows, aconselho que baixe o Spring Boot CLI diretamente dos binários.

Instale o GVM da seguinte forma:


curl -s get.gvmtool.net | bash

em seguida a instalação do Spring Boot CLI:


gvm install springboot

digitando :


spring --version

para verificar a versão instalada.
Opcionamente você poderá configurar o Command-Line completion para obter sugestões de parâmetros e argumentos durante a utilização.
Adicione em seu arquivo de configurações de ambiente (.bash_profile por exemplo) a linha


source '~/.gvm/springboot/current/shell-completion/bash/spring'

Esse path considera que você usou o GVM, altere se necessário para apontar para pasta onde seu Spring Boot CLI foi instalado.
Na linha de commando experimente:


spring 

grab  help  jar  run  test  version

Opcionamente você poderia usar o instalador disponibilizado pela equipe do Spring:


curl http://start.spring.io/install.sh | sh

Na prática não haverá difenças no resultado, mas a primeira opção constitui um modelo padronizado para gerenciamento desta e demais ferramentas utilizadas.

Crie o arquivo Groovy SampleController.groovy


@RestController
class SampleController {

  @RequestMapping("/")
  String home() {
    "Hello World!"
  }

}

Na linha de comando digite:


spring run SampleController.groovy

Observe que essa é uma classe Groovy e portanto se beneficia da simplicidade que a linguagem oferece. O resultado, mais uma vez será o mesmo observado nos posts anteriores

Categories: geral, Spring Boot, Springframework Tags:

Serializador Json personalizado para Enum


Estou trabalhando num projeto com Springframework mvc onde os serviços rest são transportados em json.
Por padrão, a serialização para json é feita pelo framework Jackson que é muito bom diga-se de passagem, já que é bastante flexivel.
No meu problema de hoje precisei personalizar a serialização dos enums pois por padrão ele retorna o name do enum. É possivel por exemplo, adicionar a anotação @JsonValue para definir qual método retornará o valor desejado. No meu caso porém, eu precisava retornar o enum numa estrutura de pojo e não:


{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}

Para isso criei um serializador personalizado:


public class SimpleEnumSerializer extends JsonSerializer> {

@Override
public void serialize(Enum< ?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeStartObject();
jgen.writeFieldName("ordinal");
jgen.writeNumber(value.ordinal());
jgen.writeFieldName("name");
jgen.writeString(value.name());
jgen.writeEndObject();
}
}

public class User {
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;

@JsonSerialize(using = SimpleEnumSerializer.class)
public Gender getGender() { return _gender; }
}

com isso o resultado passa para:

{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" {"ordinal":0, "name":"MALE"},
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}