фон
Если есть база данных oracle, есть пользователь foo (при создании пользователя будет создано имя пользователя по умолчанию) код 11111, соответствующая конфигурация yaml в проекте следующая:
spring:
datasource:
url: jdbc:oracle:thin:@1.1.1.1:1521:orcl
username: foo
password: 111111
driver-class-name: oracle.jdbc.OracleDriver
hikari:
validationTimeout: 2000
connectionTimeout: 10000
keepaliveTime: 180000
maxLifetime: 600000
minimumIdle: 3
maximumPoolSize: 3
idleTimeout: 600000
connectionTestQuery: ""
Например, используя пользователей foo для подключения к базе данных, по умолчанию он сможет посещать эту схему foo, по умолчанию он будет доступен для этой схемы foo:
select * from test_table;
其实就相当于访问:
select * from foo.test_table;
但 Если мы изменим вход в панель пользователя:
spring:
datasource:
url: jdbc:oracle:thin:@1.1.1.1:1521:orcl
username: bar
password: 111111
driver-class-name: oracle.jdbc.OracleDriver
На этом этапе снова выполните sql:
select * from test_table;
那就相当于在bar这个schema下找表,就会报错,因为这个表在bar下不存在:
select * from bar.test_table;
Как решить этот вопрос?
Или у вас все еще есть пользователи foo, подключающиеся к базе данных; Или пользователь может подключиться к базе данных.
//bar用户访问foo下的表时:
select * from foo.test_table;
Если вы не хотите, чтобы каждый sql был таким хлопотным?
Конечно, еще есть люди, которые могут спросить, для таблицы под панелью посещений посетите foo, потому что на нашей стороне:
Старая система A, использующая доступ пользователя foo к таблице foo; на этот раз мы находимся в таблице новой системы B, или dba требует использования новой учетной записи, поэтому она отделена от старой системы A (например, разные разрешения, или удобное управление, или вы можете узнать, к какой системе она подключена через учетную запись), это все еще относительно разумный запрос, его следует поддерживать.
попробуйте метод 1
В базе данных Postgre, это схема спецификации URL:
datasource:
url: jdbc:postgresql://1.1.1.1:5432/demo?currentSchema=strategy
username: 111
password: 111
driver-class-name: org.postgresql.Driver
Но оракул 我证了下,不行。
попробуйте метод 2
我该边проекты из-за использования динамического источника нескольких данных:
com.baomidou
dynamic-datasource-spring-boot-starter
4.2.0
com.oracle
ojdbc6
11.2.0.3
spring:
datasource:
dynamic:
enabled: true
primary: demo
strict: false
grace-destroy: false
datasource:
demo:
url: jdbc:postgresql://11111:5432/11111
username: 略
password: 略
driver-class-name: org.postgresql.Driver
hikari:
validationTimeout: 2000
connectionTimeout: 10000
keepaliveTime: 180000
maxLifetime: 600000
minimumIdle: 10
maximumPoolSize: 10
idleTimeout: 600000
connectionTestQuery: ""
foo:
url: jdbc:oracle:thin:@1.1.1.1:1521:orcl
username: bar
password: 111111
driver-class-name: oracle.jdbc.OracleDriver
hikari:
validationTimeout: 2000
connectionTimeout: 10000
keepaliveTime: 180000
maxLifetime: 600000
minimumIdle: 3
maximumPoolSize: 3
idleTimeout: 600000
connectionTestQuery: ""
Кроме того, пул соединений напрямую используется хикари по умолчанию для весенней загрузки, хикари поддерживает указание одного атрибута схемы:
foo:
url: jdbc:oracle:thin:@1.1.1.1:1521:orcl
username: bar
password: 111111
driver-class-name: oracle.jdbc.OracleDriver
hikari:
schema: foo ------------------- 这里可以指定
validationTimeout: 2000
connectionTimeout: 10000
keepaliveTime: 180000
maxLifetime: 600000
minimumIdle: 3
maximumPoolSize: 3
idleTimeout: 600000
connectionTestQuery: ""
Однако, в конечном итоге, эта схема должна быть передана драйверу Oracle 那 один уровень,我这边эта версия драйвера,会报错。 Она должна поддерживаться драйвером старшей версии.
com.baomidou.dynamic.datasource.creator.hikaricp.HikariCpConfig

путь к успеху
Мы можем указать sql начального выполнения:
ALTER SESSION SET CURRENT_SCHEMA = foo
hikari:
validationTimeout: 2000
connectionTimeout: 10000
keepaliveTime: 180000
maxLifetime: 600000
minimumIdle: 3
maximumPoolSize: 3
idleTimeout: 600000
connectionTestQuery: ""
connectionInitSql: "ALTER SESSION SET CURRENT_SCHEMA = foo" ------ 这个方式
Таким образом это можно сделать. Различные структуры пула подключений к базе данных должны поддерживать схожие функции: после установки соединения выполнить первоначальный запрос sql.
Примечание
使用bar下载使用foo下载表,说要要经bar手机电影手机所行。
фон
Мой личный человек не особо привык настраивать курс на nginx, мой текущий проект находится в проекте весенней загрузки, и фильтр курса реализован.
nginx –》springgate –》spring boot服务。
Spring Boot — файл Cors, по умолчанию — httpreturnheader, заголовок Cors — заголовок:
Access-Control-Allow-Origin "*";
Заголовок 电影前端设计时,说报错了。 设计有电影Access-Control-Allow-Origin。
Поскольку весенний шлюз 上也设计содержит соответствующий фильтр,,也加一个(按理说要суждение о том, имеет ли 后端服务уже есть, если это не так, не должно быть это, конфигурация Spring Gateway, что приводит к повторению).
Nginx и Cors
Если вы хотите временно решить вышеуказанную проблему, вы можете реализовать cors на nginx (в папке плюс следующие инструкции):
proxy_hide_header Access-Control-Allow-Credentials;
proxy_hide_header Access-Control-Allow-Origin;
add_header Access-Control-Allow-Credentials "true";
add_header Access-Control-Allow-Origin "*";
Важно то, что указанный выше proxy_hide_header скрыт, иначе будет несколько заголовков Access-Control-Allow-Origin, подобных этому, что приведет к созданию отчета.
Как правило, каждый может настроить себя в соответствии с ситуацией.