RDBMS deployment prerequisites
For service projects with RDBMS support before running your pipeline(s) and deploying the service project you need to do some of the below tasks
- Provide the database connection
- Provide the JPA configuration
- Generate Database DDL (optional)
Make sure your database schema and tables are already reviewed and created by your DB admin!
To generate your DB ddl files see Generating ddl
Database connection
You need to provide a connection to the database that will be used by the service project. This can be done either by
adding connection properties in you service project's application.yaml
spring.datasource:
  url: "jdbc:db2://<host>:<port>/<database-name>"
  username: <user name>
  password: <password>
  driver-class-name: com.ibm.db2.jcc.DB2Driveror by adding a configuration class that creates the necessary datasource bean programmatically:
@Configuration public class DataSourceConfig { @Bean public DataSource getDataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("com.ibm.db2.jcc.DB2Driver"); dataSourceBuilder.url("<database-url>"); dataSourceBuilder.username("<database-username>"); dataSourceBuilder.password("<database-password"); return dataSourceBuilder.build(); } }
JPA configuration
Overwriting naming strategy (Java Spring Boot Stack 2.0)
If the naming strategy isn't configured in your k5-project.yml, it will be treated as legacy. Hence the spring defaults are overwritten as following in the application.yml:
spring.jpa:
  hibernate:
    naming:
      implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
      physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplThe naming of tables and columns is also set by default e.g. a column for the property 'age' will a @Column(name="age") annotation, if nothing else is modelled in the designer.
To disable this legacy support and to switch to the spring defaults, set namingStrategies to default in your k5-project.yml.
  aggregatePersistenceSupport:
    databaseType: DB2
    enabled: true
    namingStrategies: default Now you can overwrite the defaults by changing the implicit-strategy and the physical-strategy field in your application.yml. For further details please feel free to read the section Configure Hibernate Naming Strategy of 'Spring Boot Reference Documentation'.
Projects created after 4.1.1 automatically have the default naming strategy applied.
Naming collision in entities with default naming strategy
Naming collisions can occur if you are embedding two entities that have the same property name. You can solve this by adding arbitrary annotations JPA.
An example for this is, if the same entity is embedded several times within an entity (e.g. having a delivery address and a billing address).
To handle this, please add @jakarta.persistence.AttributeOverride as custom annotation like the following example.
@jakarta.persistence.AttributeOverride(name="location", column=@Column("delivery_location")) @jakarta.persistence.AttributeOverride(name="location", column=@Column("billing_location"))
Generating database DDL files
Java Spring Boot Stack 2.0
- You can generate database DDL scripts for your entities by using the SchemaGeneratorclass found in the base package, the same where your application class is located
- To generate .ddlscripts, run the "main" method of the class from within your IDE
- Default configuration parameters can be overwritten by your project's application.yamlorapplication-local.yaml
- You may also overwrite the class at your own volition
Java Spring Boot Stack 1.0 (Deprecated)
- You can generate database DDL scripts for your entities by configuring and using the Maven plugin jpa2ddl included in your service project's pom.xmlfile
- You need to provide "SCHEMA_NAME" to be used in the .ddlscripts
- You can generate .ddlscripts by running the "generate" task of the plugin from within your IDE
- You need to provide the .ddlscripts to your database administrator and ask for them to be reviewed and your database schema and tables to be created
<plugin>
    <groupId>com.devskiller.jpa2ddl</groupId>
    <artifactId>jpa2ddl-maven-plugin</artifactId>
    <version>0.9.12</version>
    <extensions>false</extensions>
    <!-- required to determine whether to run automatically or not  -->
    <configuration>
        <outputPath>${basedir}/src/main/resources/database.sql</outputPath>
        <packages>
            <package>de.knowis.kb.demo.kbdemo.sdk.domain</package>
        </packages>
        <jpaProperties>
            <property>
                <name>hibernate.dialect</name>
                <value>org.hibernate.dialect.DB2Dialect</value>
            </property>
            <property>
                <name>hibernate.implicit_naming_strategy</name>
                <value>org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl</value>
            </property>
            <property>
                <name>hibernate.physical_naming_strategy</name>
                <value>org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl</value>
            </property>
            <property>
                <name>hibernate.default_schema</name>
                <value>SCHEMA_NAME</value>
            </property>
        </jpaProperties>
        <formatOutput>true</formatOutput>
        <delimiter>;</delimiter>
        <action>CREATE</action>
    </configuration>
</plugin>