No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Uso de anotación value para apuntar a properties

21/31
Recursos

Aportes 8

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Creo que tanto el titulo como el video quedaron mal, no es la anotación @Valid sino la anotación @Value 😃

En esta clase se utiliza la anotación @Value para poder leer valores desde el fichero application.properties

La anotación @Valid se usa en conjunto con la dependencia BeanValidation

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Esta nos permite validar campos de un POJO con simples anotaciones como @NotNull, @NotBlank, @NotEmpty etc.

public class Customer {

@NotNull
private Long customerId;

@NotBlank
private String country;

@NotEmpty
private List<String> languages;

// Getters and Setters
...
}

jdbc.url=jdbc:h2:mem:test
driver=org.h2.Driver
username=SA
password=
@Bean
    public DataSource dataSource(){
        return DataSourceBuilder.create()
                        .driverClassName(this.driver)
                        .url(this.jdbcUrl)
                        .username(this.userName)
                        .password(this.password)
                        .build();
    }

No es la mejor práctica si deja los datos así en duro. Pero si los encripta y al momento de usarlo en la clase los desencripta, puede resultar una forma conveniente de tener esos datos de forma externa en un archivo de texto

Creo que spring con vscode esta cada vez más maduro, por si alguien quiere probar

en realidad la forma de hacerlo es con archivos application para los diferentes ambientes y se configura en el principal que ambiente se está usando, por ejemplo

application-dev.properties

server.port=8081
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true
spring.output.ansi.enabled=ALWAYS 

application.properties

server.servlet.context-path=/app/v1
logging.level.root=info
logging.level.springframework.web=info
logging.level.org.hibernate=error
spring.profiles.active=dev

Por cuestiones de buenas practicas decidi usar @ConfigurationProperties(“person”) en vez de @value en los otros ejemplos de name, last name. En tal caso, veo que se pueden usar las anotaciones @ConfigurationProperties y @PropertySource juntas, no da ningun error al implementar.

package com.fundamentals.spring.fundamentalsJavaSpringBoot.configuration;

import com.fundamentals.spring.fundamentalsJavaSpringBoot.pojo.UserPojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:connection.properties")
@ConfigurationProperties("person")
@EnableConfigurationProperties(UserPojo.class)

public class GeneralConfiguration {
    private String name;
    private String lastName;
    private String random;

    @Value("${jdbc.driverClassName}")
    private String jdbcDriverClassName;

    @Value("${jdbc.url}")
    private String jdbcUrl;

    @Value("${jdbc.username}")
    private String jdbcUsername;

    @Value("${jdbc.password}")
    private String jdbcPassword;


    @Bean
    public DataSource dataSource() {
        DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName(jdbcDriverClassName);
        dataSourceBuilder.url(jdbcUrl);
        dataSourceBuilder.username(jdbcUsername);
        dataSourceBuilder.password(jdbcPassword);
        return dataSourceBuilder.build();
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getRandom() {
        return random;
    }

    public void setRandom(String random) {
        this.random = random;
    }

}