Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

SpringRepository: переопределить datasource

17.12.2014, 14:51. Показов 1336. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Захотел таки добавить к серверной части spring, но что-то spring в плане конфигурации вообще ушёл в какие-то дали что я теперь не могу понять как ему втюхать мой DataSource, подскажите пожалуйста.

Что есть:
приложение из стандартного примера http://spring.io/guides/gs/accessing-data-jpa/
тоесть собственно сама сущность и реп. к ней:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Entity
public class Customer {
 
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String firstName;
    private String lastName;
 
    protected Customer() {}
 
    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
 
public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}
А потом чёрная магия, которую я не могу победить:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
@EnableAutoConfiguration
public class Application {
 
    public static void main(String[] args) {
 
        ConfigurableApplicationContext context = SpringApplication.run(Application.class);
        DataSource dataSource = context.getBean(DataSource.class);
        CustomerRepository repository = context.getBean(CustomerRepository.class);
 
        // save a couple of customers
        repository.save(new Customer("Jack", "Bauer"));
        repository.save(new Customer("Chloe", "O'Brian"));
 
        // fetch an individual customer by ID
        Customer customer = repository.findOne(1L);
        System.out.println("Customer found with findOne(1L):");
        System.out.println("--------------------------------");
        System.out.println(customer);
        System.out.println();
        context.close();
    }
 
}
Проблема в том что в этой автоконфигурации всё основано на угадывание чего я хочу, но я не хочу стандартную H2 базу данных, я хочу перенаправить это всё на оракл. Драйвер я подложил, но на spring-config.xml я вижу оно чихать хотело, как и на persistence.xml ... как же мне то теперь отдать этому спрингу конект к субд ?
Я конечно пытался убрать аннотацию EnableAutoConfiguration и сделать по старинке:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
@Configuration
public class Application {
 
    public static void main(String[] args) {
 
        //ConfigurableApplicationContext context = SpringApplication.run(Application.class);
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        DataSource dataSource = context.getBean(DataSource.class);
        CustomerRepository repository = context.getBean(CustomerRepository.class);
С конфигурацией:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url] [url]http://www.springframework.org/schema/context[/url] [url]http://www.springframework.org/schema/context/spring-context.xsd[/url] [url]http://www.springframework.org/schema/data/jpa[/url] http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
    <context:annotation-config />
    <jpa:repositories base-package="hello"/>
 
    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
        <property name="dataSourceName" value="ds"/>
        <property name="URL" value="jdbc:oracle:thin:@//localhost:1521/XE"/>
        <property name="user" value="app"/>
        <property name="password" value="app"/>
    </bean>
 
    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="showSql" value="true"/>
        <property name="generateDdl" value="true"/>
        <property name="database" value="MYSQL"/>
    </bean>
 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
        <!-- spring based scanning for entity classes>-->
        <property name="packagesToScan" value="hello"/>
    </bean>
</beans>

Но это не сильно помогло и я получил кучу грозных сообщений "NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined".
Подскажите куда копать пожалуйста.

Добавлено через 1 час 1 минуту
Мда, а ларчик то просто открывался, достаточно отдать datasource в классе с конфигом.
Java
1
2
3
4
5
6
7
8
9
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("oracle.jdbc.pool.OracleDataSource");
        dataSource.setUrl("jdbc:oracle:thin:@//localhost:1521/XE");
        dataSource.setUsername( "app" );
        dataSource.setPassword( "app" );
        return dataSource;
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2014, 14:51
Ответы с готовыми решениями:

DataSource
Пишу в asp.net на C#. Удивило отсутствие datasource, с помощью которой раньше создавал клиент-серверные виндоус приложения. Как в asp.net...

DataSource
Ребята помогите!!! :help: Такая проблема: у меня формируется отчет туда вносятся данные.... как получить доступ к етим данным!? На...

Переопределить свйоство
Подскажие как в Combobox переопределить свойтво datasource. Что бы ему присвавалось не DataSource, а dataTable. И чтобы это можно было...

1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
21.12.2014, 02:41  [ТС]
Всё же непонятно для меня работает эта автоконфигурация в новом спринге поэтому придётся спросить снова: в каких случаях спринг начинает лезть к объявленным DataSource в классе с конфигурацией?
Потому что я рядом создал проект с классом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class Application{
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("oracle.jdbc.pool.OracleDataSource");
        dataSource.setUrl("jdbc:oracle:thin:@//localhost:1521/XE");
        dataSource.setUsername("app");
        dataSource.setPassword("app");
        return dataSource();
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
и зависимостями maven:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.0.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>
И ... и оно нифига не хочет подбирать мой DataSource, но выкидывает exception
Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
ещё до того как полезет к моему определённому DataSource. Вот я тупо скопировал maven файл и тупо скопировал Application класс и в одном проекте где я в первый раз экспериментировал оно вызывает мой метод dataSource, а в другом - нет. Почему так? Что должен найти спринг чтобы перестать искать DataSouce где-то у себя в недрях и забрать тот что отдаю я в классе Aplication? Драйвер для оракла в обоих случаях я подложить и закинуть в classpath не забыл.

Добавлено через 11 часов 56 минут
Грабли нашёл: в новом проекте idea сделала медвежую услугу и после того как я написал DataSource вместо того чтобы предложить на выбор она решила что мне больше всего подойдёт это
Java
1
import javax.activation.DataSource;
и спрашивать меня не надо, не замечал пока не попытался создать бин отдающий EntityManagerFactory где дёрнул setDataSource метод и не увидел окошко что типы то не совпадают.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2014, 02:41
Помогаю со студенческими работами здесь

Переопределить функцию
Добрый день. Занимаюсь портированием стандартного gl.h, на динамический метод вызова. (Не спрашивайте зачем... нужно скрыть таблицу...

Переопределить LOGFONTA
Вот мне надо изменить размер буковок, как это сделать? ... Graphics graphics(pd.hDC); Pen pen(Color(255, 0, 0,...

Переопределить операции *, /, ==, !=
Для класса В переопределить операции согласно варианту (см. вариант в таблице). В основной программе продемонстрировать использование ...

Переопределить делегат
Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля...

переопределить делегат
Доброго времени суток, необходимо запретить пользователю редактировать кое какие колонки в QTableView , полазил в инете нашел что самый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru