tutorial starter springbootapplication springboot run mvn example create application java spring maven spring-boot

java - starter - spring boot web application example



Filtrado de recursos de Maven con Spring Boot: no se pudo resolver el marcador de posiciĆ³n (1)

Algo nuevo en Java y Maven, pero estoy tratando de hacer que Maven maneje las propiedades de conexión de la base de datos para que la construcción de Maven las cambie entre entornos de desarrollo / etapa / producción y estoy teniendo problemas con el filtrado y los recursos. Tampoco estoy seguro de lo que estoy haciendo mal aquí.

Archivo POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.comapny</groupId> <artifactId>reporting</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>reporting</name> <url>http://maven.apache.org</url> <properties> <db.jdbcUrl>jdbc:aURL</db.jdbcUrl> <db.jdbcUn>aUser</db.jdbcUn> <db.jdbcPw>aPassword</db.jdbcPw> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <springframework.version>4.2.3.RELEASE</springframework.version> <springframework.jdbc.version>4.1.4.RELEASE</springframework.jdbc.version> <hadoop.version>2.7.1.2.3.4.2-1</hadoop.version> <hbase.version>1.1.2.2.3.4.2-1</hbase.version> <phoenix.version>4.4.0.2.3.4.2-1</phoenix.version> <junit.version>4.12</junit.version> <mail.version>1.4.3</mail.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.RELEASE</version> </parent> <repositories> <repository> <id>github-releases</id> <url>http://oss.sonatype.org/content/repositories/github-releases/</url> </repository> <repository> <id>clojars.org</id> <url>http://clojars.org/repo</url> </repository> <repository> <id>hortonworks</id> <url>http://repo.hortonworks.com/content/repositories/releases/</url> </repository> <repository> <id>twitter4j</id> <url>http://twitter4j.org/maven2</url> </repository> </repositories> <dependencies> <!-- <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.7.0_05</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- <version>1.2.3.RELEASE</version> --> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>xalan</groupId> <artifactId>xalan</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.7.0_05</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency> <dependency> <groupId>org.apache.phoenix</groupId> <artifactId>phoenix-core</artifactId> <version>${phoenix.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <!-- <exclusion> <artifactId>joda-time</artifactId> <groupId>joda-time</groupId> </exclusion> --> </exclusions> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <!-- Hadoop Dependencies --> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-util</artifactId> <version>6.1.26</version> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-sslengine</artifactId> <version>6.1.26</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- HBase Dependcies --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>${hbase.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- Other --> <dependency> <groupId>javax.mail</groupId> <artifactId>mailapi</artifactId> <version>${mail.version}</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>${mail.version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- End of Other --> <!-- Log4J 2.x 2.4.1 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>com.github.omkreddy</groupId> <artifactId>log4j2-kafka-appender</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.9.0.0</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <showWarnings>false</showWarnings> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>db.properties</include> </includes> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> <includes> <include>db.properties</include> </includes> </testResource> </testResources> </build>

db.properties

jdbc.url= ${db.jdbcUrl} jdbc.username= ${db.jdbcUn} jdbc.password= ${db.jdbcPw}

Maven versión 3.3.8

JDK 1.8.0-72

Línea de comando

mvn test -P development -X

Error

java.lang.IllegalArgumentException: Could not resolve placeholder ''db.jdbcUrl'' in string value "${db.jdbcUrl}"

Cualquier ayuda sería muy apreciada.


En primer lugar, no necesita usar un perfil. Los recursos db.properties es un recurso de prueba, por lo que debe ubicarse en src/test/resources y no en src/main/resources . El uso de perfiles complicará su construcción, solo debe recurrir a ellos como última condición.

La razón por la que tiene este problema es que Spring Boot redefine el filtro de token para que sea @ lugar del valor predeterminado ${*} . De los documentos :

Si está heredando del POM spring-boot-starter-parent , el token de filtro predeterminado de los maven-resources-plugins se ha cambiado de ${*} a @ (es decir, @maven.token@ lugar de ${maven.token} ) para evitar conflictos con los marcadores de posición de estilo Spring. Si ha habilitado el filtrado de Maven para la application.properties directamente, es posible que también desee cambiar el token de filtro predeterminado para usar otros delimitadores.

Esto significa que debería tener en su lugar:

jdbc.url= @db.jdbcUrl@ jdbc.username= @db.jdbcUn@ jdbc.password= @db.jdbcPw@

para el archivo db.properties

Luego debe eliminar su sección <resources> y reemplazarla con:

<testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> <includes> <include>db.properties</include> </includes> </testResource> </testResources>