Skip to content

Commit e8e9b72

Browse files
committed
working on sample & added auto-config
Signed-off-by: Mark Nelson <mark.x.nelson@oracle.com>
1 parent 355baa7 commit e8e9b72

File tree

9 files changed

+218
-0
lines changed

9 files changed

+218
-0
lines changed

spring-cloud-oci-autoconfigure/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.or
7676
<groupId>com.oracle.cloud.spring</groupId>
7777
<artifactId>spring-cloud-oci-core</artifactId>
7878
</dependency>
79+
<dependency>
80+
<groupId>com.oracle.cloud.spring</groupId>
81+
<artifactId>spring-cloud-oci-adb</artifactId>
82+
</dependency>
7983
<dependency>
8084
<groupId>com.oracle.cloud.spring</groupId>
8185
<artifactId>spring-cloud-oci-storage</artifactId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// Copyright (c) 2023, 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.adb;
5+
6+
import com.oracle.bmc.Region;
7+
import com.oracle.bmc.auth.RegionProvider;
8+
import com.oracle.bmc.database.DatabaseClient;
9+
import com.oracle.cloud.spring.autoconfigure.core.CredentialsProvider;
10+
import org.springframework.beans.factory.annotation.Qualifier;
11+
import org.springframework.boot.autoconfigure.AutoConfiguration;
12+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
13+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
14+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
15+
import org.springframework.cloud.context.config.annotation.RefreshScope;
16+
import org.springframework.context.annotation.Bean;
17+
18+
import java.text.MessageFormat;
19+
20+
import static com.oracle.cloud.spring.autoconfigure.core.CredentialsProviderAutoConfiguration.credentialsProviderQualifier;
21+
import static com.oracle.cloud.spring.autoconfigure.core.RegionProviderAutoConfiguration.regionProviderQualifier;
22+
23+
/**
24+
* Auto-configuration for initializing the OCI Autonomous Database component.
25+
* Depends on {@link com.oracle.cloud.spring.autoconfigure.core.CredentialsProviderAutoConfiguration} and
26+
* {@link com.oracle.cloud.spring.autoconfigure.core.RegionProviderAutoConfiguration}
27+
* for loading the Authentication configuration
28+
*
29+
* @see com.oracle.cloud.spring.adb.AutonomousDatabase
30+
*/
31+
@AutoConfiguration
32+
@ConditionalOnClass({AutonomousDatabase.class})
33+
@ConditionalOnProperty(name = "spring.cloud.oci.adb.enabled", havingValue = "true", matchIfMissing = true)
34+
public class AutonomousDatabaseAutoConfiguration {
35+
36+
@Bean
37+
@RefreshScope
38+
@ConditionalOnMissingBean(AutonomousDatabase.class)
39+
AutonomousDatabase getQueueImpl(DatabaseClient databaseClient) {
40+
return new AutonomousDatabaseImpl(databaseClient);
41+
}
42+
43+
@Bean
44+
@RefreshScope
45+
@ConditionalOnMissingBean
46+
DatabaseClient databaseClient(@Qualifier(regionProviderQualifier) RegionProvider regionProvider,
47+
@Qualifier(credentialsProviderQualifier)
48+
CredentialsProvider cp) {
49+
DatabaseClient databaseClient = DatabaseClient.builder().build(cp.getAuthenticationDetailsProvider());
50+
if (regionProvider.getRegion() != null)databaseClient.setRegion(regionProvider.getRegion());
51+
return databaseClient;
52+
}
53+
54+
}

spring-cloud-oci-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@
5959
"type": "java.lang.Boolean",
6060
"description": "Auto-configure OCI Cloud queue components.",
6161
"defaultValue": true
62+
},
63+
{
64+
"name": "spring.cloud.oci.adb.enabled",
65+
"type": "java.lang.Boolean",
66+
"description": "Auto-configure OCI Autonomous Database components.",
67+
"defaultValue": true
6268
}
6369
]
6470
}

spring-cloud-oci-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ com.oracle.cloud.spring.streaming.StreamingAutoConfiguration
99
com.oracle.cloud.spring.queue.QueueAutoConfiguration
1010
com.oracle.cloud.spring.genai.GenAIAutoConfiguration
1111
com.oracle.cloud.spring.vault.VaultAutoConfiguration
12+
com.oracle.cloud.spring.adb.AutonomousDatabaseAutoConfiguration
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
Copyright (c) 2024, Oracle and/or its affiliates.
4+
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
5+
-->
6+
7+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
8+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
9+
<parent>
10+
<groupId>com.oracle.cloud.spring</groupId>
11+
<artifactId>spring-cloud-oci-samples</artifactId>
12+
<version>1.1.0-SNAPSHOT</version>
13+
</parent>
14+
<modelVersion>4.0.0</modelVersion>
15+
<groupId>com.oracle.cloud.spring.sample.adb</groupId>
16+
<artifactId>spring-cloud-oci-adb-sample</artifactId>
17+
<name>spring-cloud-oci-adb-sample</name>
18+
<description>spring-cloud-oci-adb-sample</description>
19+
<licenses>
20+
<license>
21+
<name>The Universal Permissive License (UPL), Version 1.0</name>
22+
<url>https://oss.oracle.com/licenses/upl/</url>
23+
<distribution>repo</distribution>
24+
</license>
25+
</licenses>
26+
<properties>
27+
<java.version>17</java.version>
28+
</properties>
29+
<dependencies>
30+
<dependency>
31+
<groupId>com.oracle.cloud.spring</groupId>
32+
<artifactId>spring-cloud-oci-starter-adb</artifactId>
33+
</dependency>
34+
<dependency>
35+
<groupId>com.oracle.cloud.spring.sample.common</groupId>
36+
<artifactId>spring-cloud-oci-common-samples-utils</artifactId>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.oracle.cloud.spring.sample.common</groupId>
40+
<artifactId>spring-cloud-oci-common-samples-utils</artifactId>
41+
<type>test-jar</type>
42+
</dependency>
43+
</dependencies>
44+
45+
<build>
46+
<plugins>
47+
<plugin>
48+
<groupId>org.springframework.boot</groupId>
49+
<artifactId>spring-boot-maven-plugin</artifactId>
50+
</plugin>
51+
</plugins>
52+
</build>
53+
54+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.sample.adb.springcloudociadbsample;
5+
6+
import com.oracle.bmc.database.responses.CreateAutonomousDatabaseResponse;
7+
import com.oracle.bmc.database.responses.DeleteAutonomousDatabaseResponse;
8+
import com.oracle.bmc.database.responses.GenerateAutonomousDatabaseWalletResponse;
9+
import com.oracle.bmc.database.responses.GetAutonomousDatabaseResponse;
10+
import com.oracle.cloud.spring.adb.AutonomousDatabase;
11+
import io.swagger.v3.oas.annotations.Parameter;
12+
import io.swagger.v3.oas.annotations.tags.Tag;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.http.ResponseEntity;
15+
import org.springframework.web.bind.annotation.DeleteMapping;
16+
import org.springframework.web.bind.annotation.GetMapping;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
import org.springframework.web.bind.annotation.RequestParam;
20+
import org.springframework.web.bind.annotation.RestController;
21+
22+
@RestController
23+
@RequestMapping("demoapp/api/adb")
24+
@Tag(name = "Autonomous Database APIs")
25+
public class AdbController {
26+
27+
@Autowired
28+
AutonomousDatabase autonomousDatabase;
29+
30+
@PostMapping
31+
ResponseEntity<?> createAutonomousDatabase(
32+
@Parameter(required = true, example = "databaseName") @RequestParam String databaseName,
33+
@Parameter(required = true, example = "compartmentId") @RequestParam String compartmentId
34+
) {
35+
CreateAutonomousDatabaseResponse response = autonomousDatabase.createAutonomousDatabase(databaseName, compartmentId);
36+
return ResponseEntity.accepted().body("database id : " + response.getAutonomousDatabase().getAutonomousContainerDatabaseId());
37+
}
38+
39+
@GetMapping
40+
ResponseEntity<?> getAutonomousDatabase(@Parameter(required = true, example = "databaseId") @RequestParam String databaseId) {
41+
GetAutonomousDatabaseResponse response = autonomousDatabase.getAutonomousDatabase(databaseId);
42+
return ResponseEntity.ok().body(response);
43+
}
44+
45+
@GetMapping(value = "/wallet")
46+
ResponseEntity<?> getAutonomousDatabaseWallet(
47+
@Parameter(required = true, example = "databaseId") @RequestParam String databaseId,
48+
@Parameter(required = true, example = "password") @RequestParam String password
49+
) {
50+
GenerateAutonomousDatabaseWalletResponse response = autonomousDatabase.generateAutonomousDatabaseWallet(databaseId, password);
51+
return ResponseEntity.ok().body("opcRequestId fo generating wallet : " + response.getOpcRequestId());
52+
}
53+
54+
@DeleteMapping
55+
ResponseEntity<?> deleteAutonomousDatabase(@Parameter(required = true, example ="databaseId") @RequestParam String databaseId) {
56+
DeleteAutonomousDatabaseResponse response = autonomousDatabase.deleteAutonomousDatabase(databaseId);
57+
return ResponseEntity.ok().body("opcRequestId for deleting the database : " +response.getOpcRequestId());
58+
}
59+
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
package com.oracle.cloud.spring.sample.adb.springcloudociadbsample;
5+
6+
import io.swagger.v3.oas.annotations.tags.Tag;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
@RestController
12+
@RequestMapping("demoapp/api")
13+
@Tag(name = "Hello World APIs")
14+
public class HelloController {
15+
@GetMapping("/")
16+
public String hello() {
17+
return "Hello World From Autonomus Database Service";
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright (c) 2024, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
5+
package com.oracle.cloud.spring.sample.adb.springcloudociadbsample;
6+
7+
import org.springframework.boot.SpringApplication;
8+
import org.springframework.boot.autoconfigure.SpringBootApplication;
9+
10+
@SpringBootApplication
11+
public class SpringCloudOciAdbSampleApplication {
12+
public static void main(String[] args) {
13+
SpringApplication.run(SpringCloudOciAdbSampleApplication.class, args);
14+
}
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2024, Oracle and/or its affiliates.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
3+
4+
spring.cloud.oci.region.static = us-phoenix-1
5+
#spring.cloud.oci.config.type = RESOURCE_PRINCIPAL

0 commit comments

Comments
 (0)