diff --git a/pom.xml b/pom.xml index 009d381..0d97750 100644 --- a/pom.xml +++ b/pom.xml @@ -174,6 +174,11 @@ javafaker 1.0.2 + + org.postgresql + postgresql + 42.7.4 + @@ -190,16 +195,23 @@ + + org.postgresql postgresql @@ -223,6 +236,8 @@ + + --> diff --git a/src/main/java/com/stktrk/app/AppApplication.java b/src/main/java/com/stktrk/app/AppApplication.java index ace81bf..d750c1b 100644 --- a/src/main/java/com/stktrk/app/AppApplication.java +++ b/src/main/java/com/stktrk/app/AppApplication.java @@ -7,17 +7,19 @@ import com.stktrk.app.db.ConnectionPool; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.Comparator; import java.util.List; +import java.util.Random; import java.util.StringJoiner; // https://stackoverflow.com/questions/51221777/failed-to-configure-a-datasource-url-attribute-is-not-specified-and-no-embedd -@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +@SpringBootApplication(exclude = { FlywayAutoConfiguration.class}) @RestController public class AppApplication extends SpringBootServletInitializer { @@ -30,28 +32,26 @@ public class AppApplication extends SpringBootServletInitializer { List x = List.of(); - /* try (ArcadeGraphFactory pool = ArcadeGraphFactory.withRemote("192.168.178.50", 2480, "graph", "root", "playwithdata")) { - try (ArcadeGraph graph = pool.get()) { - x = graph.traversal().V().toList(); - } - }*/ ArcadeGraph g = ConnectionPool.getGraph(); Faker faker = new Faker(); - g.traversal().addV("Profile").property("name", faker.name().firstName()).property("lastName", faker.name().lastName()) - .iterate(); + Vertex res = g.traversal().addV("Profile").property("name", faker.name().firstName()).property("lastName", faker.name().lastName()) + .next(); x = g.traversal().V().toList(); + + Vertex target = x.get(new Random().nextInt(x.size())); + + g.traversal().V(res.id()).addE("friend").to(target).iterate(); + g.close(); - x.sort((a, b) -> a.id().toString().compareTo(b.id().toString())); + + + x.sort(Comparator.comparing(a -> a.id().toString())); StringJoiner sj = new StringJoiner("
\n"); - - - x.forEach(v -> sj.add(v.id().toString()+ " - " +(String) v.property("name").value() + " " + (String) v.property("lastName").value() )); - - return "Hello, " + name + "! There are " + x.size() + " vertices.
\n" + sj; + return "Hello, " + name + "! Added "+ res.property("name").value() + ". There are " + x.size() + " vertices.
\n" + sj; } @GetMapping("/delete") diff --git a/src/main/java/com/stktrk/app/db/FlywayConfig.java b/src/main/java/com/stktrk/app/db/FlywayConfig.java new file mode 100644 index 0000000..645f39a --- /dev/null +++ b/src/main/java/com/stktrk/app/db/FlywayConfig.java @@ -0,0 +1,48 @@ +package com.stktrk.app.db; + +import jakarta.annotation.PostConstruct; +import org.flywaydb.core.Flyway; +import org.flywaydb.core.api.migration.JavaMigration; +import org.flywaydb.core.api.output.MigrateResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; +import java.sql.SQLException; + +@Configuration +public class FlywayConfig { + // Custom migration history table name + private static final String SCHEMA_HISTORY_TABLE = "flyway_schema_history"; + + @Autowired + private DataSource dataSource; + + @Autowired + private ApplicationContext applicationContext; + + @PostConstruct + public void migrate() throws SQLException { + + // Retrieving all migration implementation classes through the Spring container + // All implementation classes no longer need to be defined in the `db.migration` package, + // they can be placed in any location that supports Bean scanning + JavaMigration[] migrationBeans = applicationContext + .getBeansOfType(JavaMigration.class) + .values() + .toArray(new JavaMigration[0]); + Flyway flyway = Flyway.configure() + .dataSource(dataSource) // No need to configure flyway JDBC URL by using the original DataSource + .defaultSchema(dataSource.getConnection().getSchema()) + .locations("db/migration") // Default migration script path + .table(SCHEMA_HISTORY_TABLE) // Default migration history table is `flyway_schema_history` + .baselineOnMigrate(true) // Default false, must be set to true for initial migration on existing databases + .baselineVersion("0") // Default "1" + .executeInTransaction(true) // Performing migration as a transaction + .installedBy(applicationContext.getId()) // Using microservice name as migration executor + .javaMigrations(migrationBeans) // Registering migration classes + .load(); + MigrateResult migrate = flyway.migrate(); // Executing migration by calling subclass implementations sequentially + } +} diff --git a/src/main/java/com/stktrk/app/db/MigrationWrapper.java b/src/main/java/com/stktrk/app/db/MigrationWrapper.java index 583f390..41cc58a 100644 --- a/src/main/java/com/stktrk/app/db/MigrationWrapper.java +++ b/src/main/java/com/stktrk/app/db/MigrationWrapper.java @@ -1,10 +1,8 @@ package com.stktrk.app.db; -import com.arcadedb.gremlin.ArcadeGraphFactory; import com.stktrk.app.configuration.GraphDbConfig; -import org.springframework.beans.factory.annotation.Autowired; +import jakarta.annotation.Nonnull; -import javax.annotation.PostConstruct; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; @@ -13,8 +11,7 @@ import java.util.Properties; public interface MigrationWrapper { - @PostConstruct - default void executeQuery(GraphDbConfig graphDbConfig, String query) throws ClassNotFoundException, SQLException { + default void executeQuery(@Nonnull GraphDbConfig graphDbConfig, @Nonnull String query) throws ClassNotFoundException, SQLException { Class.forName("org.postgresql.Driver"); Properties props = new Properties(); diff --git a/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java b/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java index 8fc68b8..d27660a 100644 --- a/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java +++ b/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java @@ -2,17 +2,20 @@ package com.stktrk.app.db.migrations; import com.stktrk.app.configuration.GraphDbConfig; import com.stktrk.app.db.MigrationWrapper; +import lombok.Data; import org.flywaydb.core.api.migration.BaseJavaMigration; import org.flywaydb.core.api.migration.Context; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; -import java.sql.*; -import java.util.Properties; - +@Component +@Data public class V1__CreateTest extends BaseJavaMigration implements MigrationWrapper { @Autowired GraphDbConfig graphDbConfig; + public void migrate(Context context) throws Exception { + this.executeQuery(graphDbConfig,"CREATE VERTEX TYPE test"); } } diff --git a/src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java b/src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java new file mode 100644 index 0000000..b9bc34b --- /dev/null +++ b/src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java @@ -0,0 +1,21 @@ +package com.stktrk.app.db.migrations; + +import com.stktrk.app.configuration.GraphDbConfig; +import com.stktrk.app.db.MigrationWrapper; +import lombok.Data; +import org.flywaydb.core.api.migration.BaseJavaMigration; +import org.flywaydb.core.api.migration.Context; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +@Data +public class V2__CreateUser extends BaseJavaMigration implements MigrationWrapper { + @Autowired + GraphDbConfig graphDbConfig; + + public void migrate(Context context) throws Exception { + + this.executeQuery(graphDbConfig,"CREATE VERTEX TYPE user"); + } +} diff --git a/src/main/resources/application-rasmus.properties b/src/main/resources/application-rasmus.properties new file mode 100644 index 0000000..4a5d075 --- /dev/null +++ b/src/main/resources/application-rasmus.properties @@ -0,0 +1,25 @@ +spring.application.name=app +server.port=9090 +springdoc.swagger-ui.path=/swagger-ui.html + +#spring.flyway.user=flyway_user +#spring.flyway.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi +#spring.flyway.schemas=flyway_db +#spring.flyway.url=jdbc:postgresql://192.168.178.50:7654/flyway_db +#spring.flyway.locations=classpath:com/stktrk/app/db/migrations + + +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url= jdbc:postgresql://192.168.178.50:7654/flyway_db +spring.datasource.username=flyway_user +spring.datasource.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi +spring.datasource.defaultSchema=flyway_db +spring.datasource.hikari.schema=flyway_db + +graph.user=root +graph.password=playwithdata +graph.connection=jdbc:postgresql://192.168.178.50:5432/graph +graph.http-port:2480 +graph.postgres-port:5432 +graph.host=192.168.178.50 +graph.graph-name=graph \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 21d1ca9..ae66bf1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,11 +2,20 @@ spring.application.name=app server.port=9090 springdoc.swagger-ui.path=/swagger-ui.html -flyway.user=flyway_user -flyway.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi -flyway.schemas=flyway_db +#spring.flyway.user=flyway_user +#spring.flyway.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi +#spring.flyway.schemas=flyway_db +#spring.flyway.url=jdbc:postgresql://192.168.178.50:7654/flyway_db +#spring.flyway.locations=classpath:com/stktrk/app/db/migrations +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url= jdbc:postgresql://192.168.178.50:7654/flyway_db +spring.datasource.username=flyway_user2 +spring.datasource.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi +spring.datasource.defaultSchema=flyway_db +spring.datasource.hikari.schema=flyway_db + graph.user=root graph.password=playwithdata graph.connection=jdbc:postgresql://192.168.178.50:5432/graph